سلام
من از این کد برای فراخوانی تابع از 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 retuedValue;
QVariant msg = "Hello from C++";
QMetaObject::invokeMethod(object, "myQmlFunction",
Q_RETURN_ARG(QVariant, retuedValue),
Q_ARG(QVariant, msg));retu 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...
... }
فعلا این کار رو با تعریف پراپرتی انجام دادم ولی تعداد پراپرتی ها خیلی خیلی زیاد شده
ایا روش بهتری وجود نداره؟
برچسب:
نویسنده: محمد رضا جوادیان