PDA

View Full Version : استفاده از signal کلاس C++ در QML



returnx
جمعه 27 تیر 1393, 17:42 عصر
فرض کنید کلاسی داریم به این شکل :

class register_action_layer : public QObject
{
Q_OBJECT
public:
explicit register_action_layer(QObject *parent = 0);
Q_INVOKABLE bool try_login(QString email);

signals:
void pars_finished();

public slots:
void recive_data_finished(QByteArray recive_data);
private :
Network_Access_Layer *m_network_request_manager;
};


حالا می خوایم از این کلاس در QML استفاده کنیم و به این شکل عمل می کنیم:

register_action_layer i_register;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("Register_Class",&i_register);
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));


خوب الان در کد qml به try_login() دسترسی داریم اما به سیگنال pars_finished دسترسی نداریم و وقتی استفاده می کنیم با ای خطا مواجه میشیم :

Cannot assign to non-existent property "onpars_finished"
دلیل این خطا چیست!؟

حامد مصافی
جمعه 27 تیر 1393, 17:58 عصر
qml انتظار داره سیگنال‌ها با on شروع بشن

returnx
جمعه 27 تیر 1393, 18:09 عصر
qml انتظار داره سیگنال‌ها با on شروع بشن
من نام سیگنال را در کلاسم به ontest تغییر دادم ، اما فایده نداشت و با همان خطا روبرو شدم...

حامد مصافی
جمعه 27 تیر 1393, 18:47 عصر
در کلاس نه، در qml
برای مثال اگر نام سیگنال شما در کد ++C با نام pars_finished تعریف شده است در کد qml باید با نام onPars_finished به اون دسترسی پیدا کنید، توجه کنید که Camel Case شده.