ali_72
سه شنبه 25 اسفند 1394, 02:26 صبح
سلام
من از این کد برای فراخوانی تابع از c++ در main.cpp استفاده میکنم ولی خیلی درست و خوب کار میکنه.
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject * object = engine.rootObjects().value(0);
QVariant returnedValue;
QVariant msg = "Hello from C++";
QMetaObject::invokeMethod(object, "myQmlFunction",
Q_RETURN_ARG(QVariant, returnedValue),
Q_ARG(QVariant, msg));
return app.exec(); }
اما در سایر کلاس ها من چطور میتونم این دسترسی را داشته باشم؟ این کد در سایر کلاس ها ی c++ کار نمیکنه.
مثلا من یه کلاس برای ارتباط با پورت سریال ساختم
و میخوام مثلا در صورت دریافت داده خاص یه سری کنترل ها غیرفعال شه یا فعال شه یا دیالوگی همراه با پیام خاصی نمایش بدم ایکون کنترل ها تغییر کنه و ....
برای مثال:
void MySerialPort::readData(){
QByteArray data = serial->readAll();
if(data[0]=='0') // For example
Show qml dialog
if(data[1]=='1') // For example
disable GroupBox
...
... }
فعلا این کار رو با تعریف پراپرتی انجام دادم ولی تعداد پراپرتی ها خیلی خیلی زیاد شده
ایا روش بهتری وجود نداره؟
من از این کد برای فراخوانی تابع از c++ در main.cpp استفاده میکنم ولی خیلی درست و خوب کار میکنه.
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject * object = engine.rootObjects().value(0);
QVariant returnedValue;
QVariant msg = "Hello from C++";
QMetaObject::invokeMethod(object, "myQmlFunction",
Q_RETURN_ARG(QVariant, returnedValue),
Q_ARG(QVariant, msg));
return app.exec(); }
اما در سایر کلاس ها من چطور میتونم این دسترسی را داشته باشم؟ این کد در سایر کلاس ها ی c++ کار نمیکنه.
مثلا من یه کلاس برای ارتباط با پورت سریال ساختم
و میخوام مثلا در صورت دریافت داده خاص یه سری کنترل ها غیرفعال شه یا فعال شه یا دیالوگی همراه با پیام خاصی نمایش بدم ایکون کنترل ها تغییر کنه و ....
برای مثال:
void MySerialPort::readData(){
QByteArray data = serial->readAll();
if(data[0]=='0') // For example
Show qml dialog
if(data[1]=='1') // For example
disable GroupBox
...
... }
فعلا این کار رو با تعریف پراپرتی انجام دادم ولی تعداد پراپرتی ها خیلی خیلی زیاد شده
ایا روش بهتری وجود نداره؟