QDeclarativeExtensionPlugin, взаимодействующий с QML
Я пишу приложение Viewer для MeeGo Process, и у меня возникают проблемы с установлением связи между QML и C++.
Обзор класса
- Элемент списка - Q_OBJECT и используется моделью списка
- Модель списка - этот класс реализует QAbstractListModel
- Плагин - этот класс реализуется из QDeclarativeExtensionPlugin и используется для создания библиотеки, которую может использовать QML.
#include <QtDeclarative> #include <QtDeclarative/qdeclarative.h> void ProcPlugin::registerTypes(const char *uri) { qmlRegisterType<ListModel>(uri, 1, 0,"listmodel"); } Q_EXPORT_PLUGIN2(Proc, ProcPlugin)
Файл проекта (я думаю, что это проблема)
TEMPLATE = lib
TARGET = proc
QT += declarative
CONFIG += qt plugin
TARGET = $$qtLibraryTarget($$TARGET)
uri = com.int.components
# Input
SOURCES += \
proc_plugin.cpp \
listmodel.cpp \
listitem.cpp \
main.cpp \
process.cpp \
updatedaemon.cpp
HEADERS += \
proc_plugin.h \
listmodel.h \
listitem.h \
process.h \
updatedaemon.h
OTHER_FILES = qmldir \
qtc_packaging/meego.spec \
proc.pro.user \
Proc_view.svg
!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
copy_qmldir.target = $$OUT_PWD/qmldir
copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
QMAKE_EXTRA_TARGETS += copy_qmldir
PRE_TARGETDEPS += $$copy_qmldir.target
}
qmldir.files = qmldir
symbian {
# ...
} else:unix {
installPath = /usr/lib/qt4/imports/$$replace(uri, \\., /)
qmldir.path = $$installPath
target.path = $$installPath
INSTALLS += target qmldir
}
QML
import QtQuick 1.0
import "ColumnHelper.js" as ColumnHelper
import com.int.component 1.0
Rectangle {
id:big_papa
width: 680
height: 200
ListView {
id: processView
model: processModel
property variant columnWidths: ColumnHelper.calcColumnWidths(model, processView)
anchors.top: name.bottom
anchors.topMargin: name.height
anchors.fill: parent
delegate: ProcessItem { }
}
}
Сообщение об ошибке
main.qml:3:1: модуль "com.int.component" не установлен
импорт com.int.component 1.0
Спасибо за чтение этого далеко!
рукав моря
1 ответ
Я думаю, что это видео может помочь вам. Это хороший учебник, показывающий, как интегрировать C++ и QML.
Обычно вам не нужно связываться с файлом .pro, но вы должны добавить importPaths: [ ...]
директива в файле .qmlproject.
С другой стороны, кажется, что вы экспортируете свой плагин с Q_EXPORT_PLUGIN2(Proc, ProcPlugin)
но я не вижу никаких import Proc 1.0
в вашем файле QML...