ورود

View Full Version : ارتباط C++ و QML



fazel-as
شنبه 01 اسفند 1394, 15:19 عصر
سلام دوستان
من در کد نویسی QML تازه کار هستم و چند سوال دارم.لطفا راهنمایی بفرمایید

1-ارتباط بین فرم های QML و کد های نوشته شده با C++ چطور انجام بدم.مثالاپردازش در کلاس های سی انجام بشه و نتایج در فرم نمایش داده بشه و یا اینکه مقادیری از فرم به کلاس ها ارسال بشه

2-چطور میتونم یک فایل exe را از QML اجرا کنم.

3-چطور میتونم تایتل بار فرم را در QML حذف کنم

4-چطور میتونم با موقعیت فرم را با موس تغییر بدم

تشکر
تشکر
تشکر
تشکر

pswin.pooya
شنبه 01 اسفند 1394, 16:06 عصر
شما می تونید گوگل کنید

fazel-as
شنبه 01 اسفند 1394, 17:22 عصر
گوگل کردم اما متوجه نشدم.نیاز به توضیح دارم
تشکر

ali_72
یک شنبه 02 اسفند 1394, 09:06 صبح
http://barnamenevis.org/showthread.php?518850-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A7%D8%B2-C-%D8%AF%D8%B1-Qml

http://doc.qt.io/qt-4.8/qtbinding.html

از سیر تا پیاز رو تو لینک بالا بخون

لینک اول که خودم یه مثال کامل نوشتم

داکیومنت خود Qt رو خوب بخون

امیدوارم تونسته باشم کمکی کنم
موفق باشید

fazel-as
چهارشنبه 19 اسفند 1394, 03:25 صبح
سلام
دوستان من هر کاری کردم نتونستم توی ویندوز تایتل بار را حذف کنم.در واقع فرم بدون تایتل و منو بار بسازم.البته در quick .اگر ممکنه دوستان راهنمایی کنند
تشکر

کامبیز اسدزاده
چهارشنبه 19 اسفند 1394, 03:52 صبح
سلام
دوستان من هر کاری کردم نتونستم توی ویندوز تایتل بار را حذف کنم.در واقع فرم بدون تایتل و منو بار بسازم.البته در quick .اگر ممکنه دوستان راهنمایی کنند
تشکر

از این کد ها استفاده کنید:


flags: Qt.FramelessWindowHint | Qt.Window

fazel-as
چهارشنبه 19 اسفند 1394, 07:38 صبح
اونطور که من سرچ کردم باید ایتم اصلی از نوع ApplicationWindow باشه و از این فلگ استفاده کنم.

کامبیز اسدزاده
چهارشنبه 19 اسفند 1394, 08:13 صبح
اونطور که من سرچ کردم باید ایتم اصلی از نوع ApplicationWindow باشه و از این فلگ استفاده کنم.

بله همینطوره.

fazel-as
پنج شنبه 20 اسفند 1394, 05:53 صبح
سلام
من وقتی با این کد qml لود میکنم ایراد میگیره:
QDeclarativeView view;
view.setSource(QUrl::fromLocalFile("main.qml"));

میگه:
ماژول «QtQuick» نسخه2.3 نصب نشده است
import QtQuick 2.3

^
اما اگر با QQmlApplicationEngine لود کنم ایراد نمیگیره

چرا؟

fazel-as
پنج شنبه 20 اسفند 1394, 07:09 صبح
آقای اسد زاده
مشکل من اینجاست که از QDeclarativeView استفاده میکنم برای استفاده از QML Bindings وکد نویسی ++C .طبق مستندات آبجکت روت باید Item باشه.Item هم فلگ FramelessWindowHint نداره.
راه حل چیه؟

کامبیز اسدزاده
پنج شنبه 20 اسفند 1394, 07:16 صبح
آقای اسد زاده
مشکل من اینجاست که از QDeclarativeView استفاده میکنم برای استفاده از QML Bindings وکد نویسی ++C .طبق مستندات آبجکت روت باید Item باشه.Item هم فلگ FramelessWindowHint نداره.
راه حل چیه؟

چرا اصرار دارید از QDeclarativeView استفاده کنید؟!
این زیر کلاس اصلی QGraphicsView هست که در نسخه ۵ به بعد منسوخ شده و اصلا گزینه ی مناسبی نیست.
بهترین روش برای ارتباط برقرار کردن با ++C گزینه QQmlApplicationEngine هست.

fazel-as
پنج شنبه 20 اسفند 1394, 13:16 عصر
اصرار ندارم.اطلاعاتم کمه.الان سرچ میکنم.

fazel-as
پنج شنبه 20 اسفند 1394, 13:51 عصر
سلام
من قبلا یک کلاس را اینطور به QML ایمپورت میکردم
qmlRegisterType<Topcls>("CLS", 1,0, "topCls")
و در qml:
Impotr CLS 1.0
حالا ایراد میگیره که CLS نصب نیست

کامبیز اسدزاده
پنج شنبه 20 اسفند 1394, 14:47 عصر
سلام
من قبلا یک کلاس را اینطور به QML ایمپورت میکردم
qmlRegisterType<Topcls>("CLS", 1,0, "topCls")
و در qml:
Impotr CLS 1.0
حالا ایراد میگیره که CLS نصب نیست

بهترین حالت ممکن همین qmlRegisterType برای رجیستر کردن هست.
و اینجا شما نوشتید Impotr CLS 1.0 که باید بشه : import CLS 1.0

fazel-as
پنج شنبه 20 اسفند 1394, 15:11 عصر
ممنون جناب اسدزاده
اشتباه تایپی بود منظورم همان import هست
مشکل جای دیگه بود. من کلاس را از QDeclarativeItem گرفته بودم که بازنویسی کردم و از QObject گرفتم.در نهایت QtQml را برای qmlRegisterType اینکلود کردم.
تشکر