Ich habe ein schmerzhaftes Problem, für das ich eine Menge Zeit verschwendet habe. Ich brauche Hilfe, weil ich noch keine Ahnung habe.Kann C++ - Klassenobjekt in qm nicht erstellen "Kann Objekt nicht zur Listeneigenschaft" data ""
Hier ist es. Ich schreibe qt schnelle Anwendung mit Qml in Qt Creator auf Windows 8.1. Meine eigene C++ Klasse mit dem Namen "one" erstellt. Registriert es über:
In qml Datei ich es importiert:
import OneClass 1.0
Inzwischen alles sehr gut funktioniert. Aber dann habe ich beschlossen, eine Shared Library zu erstellen, wo ich meine "One" C++ Klasse einbaute. Separates Projekt als neues Projekt-> Bibliothek-> C++ - Bibliothek erstellt. Erbaute Bibliothek mit dem Namen "Mainlib", alles war in Ordnung. Verbunden diese Bibliothek zu meiner Anwendung von Zeichenketten in .pro-Datei hinzufügen:
DEPENDPATH += ../lib/mainlib
INCLUDEPATH += ../lib/mainlib
LIBS += -L../lib/build-mainlib-Desktop_Qt_5_7_0_MinGW_32bit-Release/release -lmainlib
Run-Projekt und das ist Moment, wenn ich dieses Problem habe:
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
Stück meiner „one.h“ Datei :
#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":
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
}
Stück meiner "main.qml" Datei, wo ich meine Aufgabe einer Klasse deklariert:
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}
...
}
Stück meiner "main.cpp" Datei :
#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();
}
.proDatei My Anwendung:
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
Hier ist die Sache, wenn "one.h" und "one.cpp" auskommentieren, um sie neben der Anwendung zu kompilieren, erscheint dieses Problem nicht und alles funktioniert gut. Aber wenn sie kommentiert werden, um mit der Bibliothek zu arbeiten, bekomme ich dieses Problem "Kann Objekt nicht zu Liste Eigenschaft" Daten "" Problem zuweisen.
Ich habe versucht, Bibliothek über Rechtsklick auf Projekt-> Bibliothek hinzufügen verbinden, aber das Ergebnis ist das gleiche. Ich habe die Dokumentation über diese "Daten" -Eigenschaft gelesen, versucht, die Objektdeklaration explizit den "Daten" zuzuordnen, aber ich habe die gleiche erhalten. Erprobt:
resources: [
One {id: objOne}
]
Und bekam "kann Objekt nicht zu listen Eigenschaft" Ressourcen "". Ich bin nur erschöpft mit der Lösung dieses Problems. Ich habe dich fast jeden Schritt beschrieben, weil ich denke, dass ich etwas falsch mache? Ich bitte um Hilfe ...
Was ist der Inhalt von 'one.h'? –
@Patrizio, ich habe den Inhalt von 'one.h' zu meinem Beitrag hinzugefügt. –
Sollen wir raten, was eins ist und was 'Ressource' betrifft? – folibis