私は苦しい問題を抱えています。私は助けが必要です。なぜなら、私はすでに何も考えていないからです。qmlにC++クラスオブジェクトを作成できません "リストプロパティにオブジェクトを割り当てることができません"データ "
ここにあります。 Qt Creator for Windows 8.1でqmlを使ってqtクイックアプリケーションを書いています。名前が "one"の私自身のC++クラスを作成しました。経由でRegistrated:QMLファイルで
私はそれをインポート:
import OneClass 1.0
今ではすべてでは非常によく働きました。しかし、私は共有ライブラリを作成することに決めました。ここで私は "One" C++クラスを作成しました。新規プロジェクト→ライブラリ→C++ライブラリとして別々のプロジェクトを作成しました。 "mainlib"という名前のライブラリを構築しました。 .PROファイル内の文字列を追加することにより、自分のアプリケーションにこのライブラリ接続:
DEPENDPATH += ../lib/mainlib
INCLUDEPATH += ../lib/mainlib
LIBS += -L../lib/build-mainlib-Desktop_Qt_5_7_0_MinGW_32bit-Release/release -lmainlib
実行プロジェクトを、私はこの問題を持っているときには、瞬間だ:私の「one.h」ファイルの
QQmlApplicationEngine failed to load component
qrc:/main.qml:18 Cannot assign object to list property "data"
ASSERT: "!isEmpty()" in file C:\Program >Files\Qt\5.7\mingw53_32\include/QtCore/qlist.h, line 341
ピース:
#ifndef ONE_H
#define ONE_H
#include "mainlib_global.h"
#include <QObject>
class MAINLIBSHARED_EXPORT One : public QObject
{
Q_OBJECT
Q_PROPERTY(QString port_number READ get_port_number WRITE set_port_number)
Q_PROPERTY(QString port_speed READ get_port_speed WRITE set_port_speed)
Q_PROPERTY(QString x READ get_x WRITE set_x)
Q_PROPERTY(QString y READ get_y WRITE set_y)
public:
One();
~One();
QString get_port_number(void);
...
signals:
void portOpened(QString str);
...
private:
QString port_number;
QString x;
QString y;
};
#endif // ONE_H
"mainlib_global.h":
#ifndef MAINLIB_GLOBAL_H
#define MAINLIB_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(MAINLIB_LIBRARY)
# define MAINLIBSHARED_EXPORT Q_DECL_EXPORT
#else
# define MAINLIBSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // MAINLIB_GLOBAL_H
"mainlib.pro":私は一つのクラスの私のオブジェクトを宣言した私の "main.qml" ファイルの
QT -= gui
TARGET = mainlib
TEMPLATE = lib
DEFINES += MAINLIB_LIBRARY
SOURCES += one.cpp
HEADERS += one.h\
mainlib_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
はワンピース、:私の "main.cppに" ファイルの
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.0
import OneClass 1.0
import QtQuick.Dialogs 1.1
Window {
id: mainWindow
visible: true
width: 1000
height: 720
minimumWidth: 930
color: "lightgrey";
property bool connected: false
// Object declaration
One {id: objOne}
...
}
ワンピース:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
#include "one.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QLocale::setDefault(QLocale::c());
qmlRegisterType<One>("OneClass", 1, 0, "One");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
...
return app.exec();
}
私のアプリケーションの.PROファイル:
TEMPLATE = app
DEPENDPATH += ../lib/mainlib
INCLUDEPATH += ../lib/mainlib
LIBS += -L../lib/build-mainlib-Desktop_Qt_5_7_0_MinGW_32bit-Release/release -lmainlib
QT += qml quick serialport
CONFIG += c++11
win32: RC_ICONS += icon.ico
SOURCES += main.cpp \
#one.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Default rules for deployment.
include(deployment.pri)
HEADERS += \
#one.h
"one.h"と "one.cpp"のコメントを外してアプリケーションと一緒にコンパイルすると、この問題は現れず、すべて正常に動作します。しかし、ライブラリと一緒に作業することをコメントするとき、私はこの問題を "プロパティをリストするオブジェクトを割り当てることができません"というデータ問題を取得します。
私はプロジェクト - >ライブラリの追加を右クリックしてライブラリに接続しようとしましたが、結果は同じです。私はこの "data"プロパティに関するドキュメントを読んで、明示的にオブジェクト宣言を "data"に割り当てようとしましたが、同じことをしました。試しました:
resources: [
One {id: objOne}
]
「オブジェクトをリストプロパティに割り当てることができません」というリソースがあります。私はこの問題を解決するだけで疲れました。私はあなたがたぶんすべてのステップを説明しました。私は間違ったやり方で何かをするかもしれないと思いますから?私は可能な解決策は、新しいプロパティを宣言し、新しい「ワン」コンポーネントにバインドすることです...助けを
'one.h'の内容は何ですか? –
@Patrizio、私は 'one.h'の内容を私の投稿に追加しました。 –
「One」とは何か、そして「リソース」とは何かを推測するでしょうか? – folibis