Hi,
I am trying to use C++ signals with custom object in QML.
Please see example:
1) I have class person:
class person : public QObject
{
Q_OBJECT
Q_PROPERTY(QString myStr READ myStr WRITE setErrorMessage NOTIFY changed)
public:
explicit person(QObject *parent = 0);
person(const person &copy);
~person();
QString myStr() const{
return m_myStr;
}
void setErrorMessage(const QString &str);
signals:
void changed();
public slots:
public:
QString m_myStr;
};
2) Also I have manager class
class manager : public QObject
{
Q_OBJECT
public:
explicit manager();
~manager();
signals:
void changeStr(const person &pr);
public slots:
void needChangeStr();
};
manager::manager()
{
}
manager::~manager()
{
}
void manager:: needChangeStr()
{
person per;
per.setErrorMessage("test");
emit changeStr(per);
}
3) In main.cpp I have registerd this classes:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qRegisterMetaType<person>("person");
qmlRegisterType<manager>("core.m.com", 1, 0, "Manager");
qmlRegisterType<person>("core.m.com", 1, 0, "Person");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
4) And In qml file I use it:
Manager
{
id: man
onChangeStr:
{
console.info(pr.myStr)
}
}
But I can not get myStr. The following error logs in output:
qt.winrtrunner.app: undefined.
So could you help me with it ?
How should I use C++ signals in qml with custom parameters?
↧








