ورود

View Full Version : سوال: اتصال qml به cpp در Qt



vertionality
دوشنبه 08 مرداد 1397, 23:00 عصر
سلام

من یک text area دارم می خواهم اطلاعاتش را در یک string در فایل cpp ام ذخیره کنم .

چه جوری میشه فایل qml را با cpp مرتبط کرد ؟

ممنون

کامبیز اسدزاده
سه شنبه 09 مرداد 1397, 01:01 صبح
سلام

من یک text area دارم می خواهم اطلاعاتش را در یک string در فایل cpp ام ذخیره کنم .

چه جوری میشه فایل qml را با cpp مرتبط کرد ؟

ممنون

برای ارتباط این دو باید کلاس و اشیاء سمت سی++ رو در کیو ام ال توسط qmlRegisterType رجیستر کنی، اینم نمونه مثال (https://iostream.ir/forums/topic/63-%D9%86%D9%85%D9%88%D9%86%D9%87-%D9%85%D8%AB%D8%A7%D9%84-%D9%85%D9%8F%D8%AF%D8%B1%D9%86-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%82%D8%B1%D8%A7%D8%B1%DB%8C-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%DB%8C%D9%86-c-%D9%88-qml-%D8%AF%D8%B1-%D9%82%D8%A7%D9%84%D8%A8-contact-list/)

vertionality
سه شنبه 09 مرداد 1397, 11:37 صبح
برای ارتباط این دو باید کلاس و اشیاء سمت سی++ رو در کیو ام ال توسط qmlRegisterType رجیستر کنی، اینم نمونه مثال

من راستش گیج شدم ، رجیستر که کردیم چه اتفاقی می افته ،

یعنی ما وقتی رجیستر میکنیم بعدش میریم import میکنیم توی qml . چی توی qml ایمپورت میشه ؟

این ارتباط دو طرفه است ؟ یعنی هم cpp به qml هم qml به cpp ؟

خوب پس چرا از QQmlApplicationEngine استفاده می کنیم . ما که یکبار qml را فراخوانی کرده ایم .

چرا نباید متغیر های پراپرتی بصورت دیفالت در cpp قابل مشاهده باشند ؟

ممنون

vertionality
یک شنبه 14 مرداد 1397, 00:00 صبح
برای ارتباط این دو باید کلاس و اشیاء سمت سی++ رو در کیو ام ال توسط qmlRegisterType رجیستر کنی، اینم نمونه مثال (https://iostream.ir/forums/topic/63-%D9%86%D9%85%D9%88%D9%86%D9%87-%D9%85%D8%AB%D8%A7%D9%84-%D9%85%D9%8F%D8%AF%D8%B1%D9%86-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%82%D8%B1%D8%A7%D8%B1%DB%8C-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%DB%8C%D9%86-c-%D9%88-qml-%D8%AF%D8%B1-%D9%82%D8%A7%D9%84%D8%A8-contact-list/)




الان ازه حل شد . فقط یک مشکلی که هست اگر بخواهم از qQmlProperty در main.cpp استفاده کنم برای خواندن اطلاعات

ارور میده که :



D:\Program\QT\5.11.1\mingw53_32\include\QtQml\qqml property.h:131: error: a function-definition is not allowed here before '{' token
{
^



بعد که به فایل خود کتابخانه مراجعه میکنم ارور را از این قسمت گرفته :


inlineuintqHash(constQQmlProperty&key)
{
returnqHash(key.object())+qHash(key.name());
}






کد فایل main.cpp :




#include<QQmlProperty>


QQmlEngineengine; QQmlComponentcomponent(&engine,"qrc:/main.qml"); QObject*object=component.create();
qDebug()<<"Propertyvalue:"<<QQmlProperty::read(object,"someNumber").toInt();




کد فایل main.qml :


importQtQuick2.9

importQtQuick.Controls2.2 importQtQuick.Window2.3
ApplicationWindow{ height:200 width:200 propertyintsomeNumber:100 }




دستتون درد نکنه ، کلا مطالب خیلی خوبی توی سایت هست . خیلی توی زمینه کمکم کرد . دستتون درد نکنه

vertionality
چهارشنبه 31 مرداد 1397, 14:44 عصر
مشکل بالا حل شد بجای read property از invoke استفاده کردم .
اگر کسی هنوز نتونسته cpp را به qml لینک کنه میتونه از این سورس استفاده کنه .
دیگه رجیستری نمی خواهد یک تابع می سازید بعد هر بار که مثلا دکمه را فشار داد تابع اجرا می شود .
لینک (https://github.com/wisoltech/qt-signal-slot)
ممنون