Модуль QML не установлен (серверная часть C++)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Модуль QML не установлен (серверная часть C++)

Сообщение Anonymous »

Я пытаюсь сделать серверный класс C++ с макросом QML_ELEMENT видимым для App.qml, но это не работает. Я добавил qt_add_qml_module в CMakeLists.txt, но, похоже, он не создает модуль. Вот важные файлы:

Код: Выделить всё

# CMakeLists.txt
cmake_minimum_required(VERSION 3.21.1)

option(LINK_INSIGHT "Link Qt Insight Tracker library" ON)
option(BUILD_QDS_COMPONENTS "Build design studio components" ON)

project(SzachyApp LANGUAGES CXX)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/qml)
set(QML_IMPORT_PATH ${QT_QML_OUTPUT_DIRECTORY}
CACHE STRING "Import paths for Qt Creator's code model"
FORCE
)
set(app_icon_resource_windows "D:/qt/proj/Szachy/resources.rc")

find_package(Qt6 6.8 REQUIRED COMPONENTS Core Gui Widgets Qml Quick QuickTimeline ShaderTools)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Quick)
find_package(Qt6 REQUIRED COMPONENTS Core)
qt_standard_project_setup()

qt_add_executable(${CMAKE_PROJECT_NAME} ${app_icon_resource_windows}

App/position.h App/position.cpp)
qt_add_resources(${CMAKE_PROJECT_NAME} "configuration"

target_link_libraries(SzachyApp PRIVATE Qt6::Core)

qt_add_qml_module(SzachyApp
URI art.sz
VERSION 1.0
SOURCES
App/gamemanager.h App/gamemanager.cpp
)

target_link_libraries(SzachyApp PRIVATE Qt6::Core Qt6::Widgets Qt6::Quick Qt6::Widgets)
PREFIX "/"
FILES
qtquickcontrols2.conf)

include(qds)

if (BUILD_QDS_COMPONENTS)
include(qmlcomponents OPTIONAL)
endif()

if (LINK_INSIGHT)
include(insight OPTIONAL)
endif ()

include(GNUInstallDirs)
install(TARGETS ${CMAKE_PROJECT_NAME}
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

Код: Выделить всё

// main.cpp

#include 
#include 
#include 
#include "gamemanager.h"
#include "autogen/environment.h"
#include 

int main(int argc, char *argv[])
{
set_qt_environment();
QApplication app(argc, argv);
app.setWindowIcon(QIcon("D:/qt/proj/Szachy/SzachyContent/icons/szachy.ico"));

QQmlApplicationEngine engine;
const QUrl url(mainQmlFile);
QObject::connect(
&engine, &QQmlApplicationEngine::objectCreated, &app,
[url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);

engine.addImportPath("qrc:/qt/qml/");
engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
engine.addImportPath(":/");
engine.load(url);

if (engine.rootObjects().isEmpty())
return -1;

return app.exec();
}

Код: Выделить всё

// gamemanager.h - the backend class
#ifndef GAMEMANAGER_H
#define GAMEMANAGER_H

#include 
#include 

class GameManager : public QObject
{
Q_OBJECT
QML_ELEMENT
public:
explicit GameManager(QObject *parent = nullptr);

signals:
};

#endif // GAMEMANAGER_H
В App.qml при импорте art.sz 1.0 выдается ошибка. Как я могу это исправить? Я перепробовал множество решений, но документация Qt мне неясна.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -c-backend
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»