QDeclarativeExtensionPlugin, взаимодействующий с QML - PullRequest
4 голосов
/ 23 июня 2011

Я пишу приложение для просмотра процесса MeeGo, и у меня возникают проблемы с установлением связи между 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" не установлен

import com.int.component 1.0

Спасибо за чтение этого!
Кайл

1 Ответ

3 голосов
/ 23 июня 2011

Я думаю, что это видео может помочь вам.Это хороший учебник, показывающий, как интегрировать c ++ и QML.

Обычно вам не нужно возиться с файлом .pro , но вы должны добавить директиву importPaths: [ ...] в .qmlproject file.

С другой стороны, кажется, что вы экспортируете свой плагин с Q_EXPORT_PLUGIN2(Proc, ProcPlugin), но я не вижу import Proc 1.0 в вашем файле QML ...

...