QT: создайте dll qml и открытый класс C++ [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 QT: создайте dll qml и открытый класс C++ [закрыто]

Сообщение Anonymous »

Мне нужно создать QT DLL с QML внутри. мне нужно предоставить функцию C++ и элемент qml.
Я хочу связать только dll и только файл заголовка.
Как должен быть структурирован файл .pro и класс dll?
Как я могу импортировать в основной проект?
это код dll .pro:

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

QT += core gui quick qml

CONFIG += dll

TARGET = MyQmlDll
TEMPLATE = lib

SOURCES += \
main.cpp \
src/myclass.cpp

HEADERS += \
src/MyLibrary_global.h \
src/myclass.h

# Include path for QML
RESOURCES += qml.qrc

# Define output path
DESTDIR = $$PWD/lib

DISTFILES += \
qmldir
внутри есть файл qmldir, файл qml.qrc, один файл классов, один файл qml с красным прямоугольником и файл main с этим кодом:

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

#include 
#include 

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.addImportPath("./../MyLibrary/lib");
const QUrl url(QStringLiteral("qrc:/MainP/main.qml"));
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreated,
&app,
[url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
},
Qt::QueuedConnection);
engine.load(url);

return app.exec();
}
в основном проекте я создал это как file.pro

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

QT += quick

# Aggiungi il percorso del DLL
QML_IMPORT_PATH += $$PWD/../MyLibrary/lib
# Aggiungi il percorso della directory delle librerie
LIBS += -L$$PWD/../MyLibrary/lib/MyQmlDll.dll

SOURCES += \
main.cpp

resources.files = main.qml
resources.prefix = /$${TARGET}
RESOURCES += resources

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
и это как main.cpp

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

#include 
#include 

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.addImportPath("./../MyLibrary/lib");
const QUrl url(QStringLiteral("qrc:/MainP/main.qml"));
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreated,
&app,
[url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
},
Qt::QueuedConnection);
engine.load(url);

return app.exec();
}
а также это как main.qml

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

import QtQuick
import MyQmlDll

Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")

// Usa il componente definito nel DLL
MyClass { // Proprietà e metodi del componente
}

// Usa l'oggetto QML definito nel DLL
MyQmlObject {
// Proprietà e metodi dell'oggetto QML
}
}
Сборка DLL в порядке, основное приложение запущено, возникла ошибка времени выполнения:
QQmlApplicationEngine не удалось загрузить компонент
qrc:/MainP/main.qml:2:1 : модуль "MyQmlDll" не установлен
не могу понять почему.

Подробнее здесь: https://stackoverflow.com/questions/791 ... osed-class
Ответить

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

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

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

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

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