Что я пытаюсь сделать
У меня есть два класса ObjectA
и ObjectB
. ObjectA
- это композиция ObjectB
. Я хочу сделать кнопку, которая вызывает функцию insert(int num, ObjectA &A)
из ObjectB
в QML.
Мой код:
objecta.h
//...
#include <QObject>
#include <QDateTime>
class ObjectA
{
public:
explicit ObjectA(QString str);
//...
private:
//...
};
//...
objectb.h
//...
#include <QObject>
#include <QList>
#include <QDebug>
#include "objecta.h"
class ObjectB : public QObject
{
Q_OBJECT
public slots:
ObjectA generate(QString str);
void insert(int priority, ObjectA &A);
public:
ObjectB(QObject *parent = nullptr);
//...
private:
//...
};
//...
objecta. cpp
include "objecta.h"
ObjectA::ObjectA(QString str)
{
//...
}
objectb. cpp
include "objectb.h"
//Object A is a composition of Object B
ObjectA ObjectB::generate(QString str){
ObjectA *A = new ObjectA(str);
return *A;
}
// ^ I will use the *A as the parameter for the &A in function insert()
void ObjectB::insert(int num, ObjectA &A){
//...
}
//...
main. cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "objectb.h"
int main(int argc, char *argv[])
{
ObjectB B;
qmlRegisterType<ObjectB>("com.mycompany.ObjectB", 1, 0, "ObjectB");
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/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 2.12
import QtQuick.Window 2.12
import com.mycompany.ObjectB 1.0
Window {
//...
ObjectB {
id: objectb
}
Page {} //Page.qml
}
Page.qml
import QtQuick 2.0
import QtQuick.Controls 2.1
Row {
id: row
anchors.centerIn: parent
spacing: 20
TextField {
id: strfield
}
ComboBox {
id: numbox
width: 200
model: [ "1", "2", "3" ]
}
Button {
id: btninsert
text: "Insert"
highlighted: true
onClicked: objectb.insert(numbox.currentIndex+1,objectb.generate(strfield.text))
}
}
Ошибка, которую я получил
Когда я нажимаю на кнопку, я получаю это сообщение об ошибке:
qrc:/Page.qml:28: Error: Unknown method return type: ObjectA
I думаю, что проблема в objectb.generate(strfield.text)
, не удалось вернуть ObjectA
, поскольку QML не может распознать пользовательский тип. Как я могу это решить?
Редактировать: Добавлены заголовочные файлы ObjectA
и ObjectB
и cpp файл ObjectA