رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
  • 0
amirb

تعریف data type سفارشی در QML


سوال

سلام.خسته نباشید.

من می خوام از کتابخانه ی nakama در qml استفاده کنم.این کتابخانه به زبان cpp است.برای توابعش می تونم سیگنال و اسلات بنویسم و در qml فراخوانی کنم.

ولی data type های سفارشی اون رو نمی دونم چطور در qml ایجاد کنم.مثلا در کد زیر (cpp):

NClientParameters parameters;
parameters.serverKey = "defaultkey";
parameters.host = "127.0.0.1";
parameters.port = DEFAULT_PORT;
NClientPtr client = createDefaultClient(parameters);

می خوام NClientParameters در qml قابل دسترسی باشه و بتونم هاست و پورت رو داخل qml تنظیم کنم(مثل بالا). بعد هم به عنوان پارامتر برای تابعم استفاده کنم.

لینک کتابخانه cpp:

https://heroiclabs.com/docs/cpp-client-guide/#usage

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

2 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0

درود بر شما، سلامت باشید؛

برای اینکار بهتر هست که یک کلاس به عنوان Adapter درست کنید که درواقع ارتباطات شما را با این کلاس پوشش بدهد و آن کلاس را در سمت QML استفاده کنید. برای استفاده از داده‌های خودمان در سمت QML راه‌های مختلفی هست که باید مطالعه کنید و بسته به نیازتون انتخاب کنید؛ سند روش‌های برقراری ارتباط بین ++C و QML.

یک مثال در این قسمت آقای اسدزاده زده‌اند و برای نمونهٔ اضافه بنده هم یک مثال از این روش، به‌ اینصورت‌که یک کلاس برای ارتباط برقرار کردن با کلاس QVector درست کرده‌ام :

[پیوند فایل somewrapper.h]

class SomeWrapper : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString StringWrap READ readCurrentString WRITE addAnotherString)
public:
    void addAnotherString(const QString& string)
    {
        REPORT(string, "ourStringList");
        REPORT(string, "currentString");
        this->currentString = string;
        this->ourStringList.push_back(string);
    }
    QString readCurrentString(void) const
    { return this->currentString; }
    Q_INVOKABLE QString getSomeString(const int& index) const
    { return this->ourStringList.at(index); }
private:
    QVector<QString> ourStringList;
    QString currentString;
};

و به این‌صورت آن را برای موتور QML معرفی کرده‌ام :

[پیوند فایل main.cpp]

int main (int argc, char** argv)
{
    QGuiApplication application(argc, argv);
    QQmlApplicationEngine qmlApplication;

    SomeWrapper stringBook;
    qmlApplication.rootContext()->setContextProperty
        ("StringBook", &stringBook);
    qmlApplication.load(QUrl::fromLocalFile("../../main.qml"));
    return application.exec();
}

و حال به راحتی می‌توانم داده‌های مورد نیاز را به سادگی از سمت QML دریافت کرده و با پردازش آن در کلاس SomeWrapper به کلاس QVector ارسال کنم :

[پیوند فایل main.qml]

TextField{
	id: user_search_input
	placeholderText: "خانهٔ مورد نظر را وارد کنید"
	horizontalAlignment: TextInput.Center
}
Button{
	text: "گَشتن"
	onClicked: {
		user_search_input.text =
			StringBook.getSomeString(user_search_input.text)
	}
}

 

ویرایش شده در توسط قاسم رمضانی منش
اضافه کردنم مثال بیشتر.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

فکر کنم باید داده هایی رو که می خوام تبادل کنم به نوع Qvariant در C++ و variant در qml در بیارم تا مشکلی پیش نیاد.

این طور که فهمیدم این دو نوع یه جورایی dynamic هست و میشه داده های مختلفی رو داخلش ذخیره کرد.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...