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)
ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.