رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

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

با سلام و عرض خسته نباشید.

سوالی که خیلی نسبت به اون جستجو کردم و نتیجه ی واضحی نگرفتم اینه که چطور میشه به یک کامپوننت موجود در یک فایل دیگه Qml دسترسی پیدا کرد و property های اون رو خواند یا نوشت.مثلا من میخوام وقتی روی دکمه ی موجود در فرم یک کلیک شد مقدار text از کامپوننت Text در یک فایل دیگه رو بخونم یا تغییر بدم.(ضمنا هر دو فایل Qml هست)

لطفا اساتید بزرگوار هر کاری که لازم هست انجام بدم رو توضیح بدن.تشکر

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 2 ساعت قبل، amirb گفته است :

با سلام و عرض خسته نباشید.

سوالی که خیلی نسبت به اون جستجو کردم و نتیجه ی واضحی نگرفتم اینه که چطور میشه به یک کامپوننت موجود در یک فایل دیگه Qml دسترسی پیدا کرد و property های اون رو خواند یا نوشت.مثلا من میخوام وقتی روی دکمه ی موجود در فرم یک کلیک شد مقدار text از کامپوننت Text در یک فایل دیگه رو بخونم یا تغییر بدم.(ضمنا هر دو فایل Qml هست)

لطفا اساتید بزرگوار هر کاری که لازم هست انجام بدم رو توضیح بدن.تشکر

از پراپرتی‌های سراسری و همچنین QtObject استفاده کنید، نمونه مثال زیر رو برای این منظور نوشتم که پاسخ سوال شماست.

//MyFirstFile.qml

import QtQuick 2.11
import QtQuick.Controls 2.2

Page {

    property color setColor: "green"
    property string setTitle: "Hi"

    QtObject {
        id: myObjectSetting
        property color color: setColor
        property string title: setTitle
    }

    Loader {
        sourceComponent: myComp
        anchors.centerIn: parent
    }

    Component {
        id: myComp

        Rectangle {

            color: myObjectSetting.color;
            width: 100; height: 100;

            Text {
                anchors.centerIn: parent
                text: myObjectSetting.title
                color: myObjectSetting.color
            }
        }
    }


}


//MySecondFile.qml
import QtQuick 2.11
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.4

ColumnLayout {

   anchors.centerIn: parent

    MyFirstFile {
            id:myItem
            setTitle: "Hi"
            setColor: "red"

   }

    Button {
            text: "Change"

            onClicked: {
                myItem.setColor = "yellow"
                myItem.setTitle = "Bye!"
            }
      }
}

 

  • تشکر شده 1

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


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

ببخشید ولی من حتی متوجه نشدم کدوم فایل دیگری رو تغییر میده!

میشه یه توضیحی راجع به شیوه ی کار بفرمایید.

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 2 دقیقه قبل، amirb گفته است :

ببخشید ولی من حتی متوجه نشدم کدوم فایل دیگری رو تغییر میده!

میشه یه توضیحی راجع به شیوه ی کار بفرمایید.

سادست که!

محتوای فایل اول هست MyFirstFile.qml و محتوای فایل دوم MySecondFile.qml پایینی هست. فایل اول شما شامل Component ای هستش که می‌خواهید مقادیرش رو تو فایل دیگه‌ای تغییر بدین. فایل دوم که شامل فراخوانی و اعمال تغییرات روی کامپوننت به حساب میاد.

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در هم اکنون، amirb گفته است :

همین روشی هست که مثال زدم، فقط از یه فایل js کمک گرفته که تو این مراحل نیازی نیست.

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


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

ببینید درست متوجه شدم:

شما در فایل اول در زیر مجموعه ی Page دو عدد property تعریف کردید و مقداری رو که بعدا می خوایم تغییر بدیم رو وابسته ی به اونها کردید.بعد توی فایل دوم اون پروپرتی ها رو مقدار جدید دادید.

خب پس نقش qtobject چی هست اینجا؟

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 11 دقیقه قبل، amirb گفته است :

ببینید درست متوجه شدم:

شما در فایل اول در زیر مجموعه ی Page دو عدد property تعریف کردید و مقداری رو که بعدا می خوایم تغییر بدیم رو وابسته ی به اونها کردید.بعد توی فایل دوم اون پروپرتی ها رو مقدار جدید دادید.

خب پس نقش qtobject چی هست اینجا؟

شما می‌تونید اون QtObject رو حذف و مستقیم پراپرتی‌های عمومی تعریف کنید، باز هیچ ایرادی نداره اما در اصل QtObject به عنوان یک عنصر غیر بصری می‌تونه نام اشیاء رو بگیره و اون‌ها رو در جایی که می‌خواین در اختیارتون قرار بده. مثلاً وقتی می‌خواین یک کامپوننت یا ماژول یا هر نوع افزونه‌ای به بخشی از برنامه‌ی خودتون در QML اضافه کنید بهتره از QtObject هم استفاده کنید تا اشیاء مربوط به اون واحد رو به صورت اختصاصی تعریف و سفارشی سازی کنید که در توسعه و حتی برقراری ارتباط با سی‌++ بسیار مفید خواهد بود.

 

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


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

متوجه شدم.تشکر بسیار.

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


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

با عرض سلام مجدد.

دو سوال در ادامه ی همین بحث داشتم:

1. ما برای این که بتونیم این فراخوانی رو انجام بدیم یک instance از فایل مبدا در فایل مقصد ایجاد می کنیم که برای این کار باید فایل با حرف بزرگ باشه(چون آیتم با حروف بزرگ شروع میشه)درسته؟

خب حالا اگه فایل مبدا ما main.qml بود چطور ازش instance ایجاد کنیم؟من امتحان کردم و فایل رو به Main.qml تغییر نام دادم ولی ارور داد.

 

2. در این روش چون ما instance ایجاد می کنیم پس هر چی توی فایل مبدا هست توی فایل مقصد هم نشون داده میشه.برای حل این مشکل چیکار باید کرد؟

تشکر

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 4 ساعت قبل، amirb گفته است :

با عرض سلام مجدد.

دو سوال در ادامه ی همین بحث داشتم:

1. ما برای این که بتونیم این فراخوانی رو انجام بدیم یک instance از فایل مبدا در فایل مقصد ایجاد می کنیم که برای این کار باید فایل با حرف بزرگ باشه(چون آیتم با حروف بزرگ شروع میشه)درسته؟

خب حالا اگه فایل مبدا ما main.qml بود چطور ازش instance ایجاد کنیم؟من امتحان کردم و فایل رو به Main.qml تغییر نام دادم ولی ارور داد.

 

2. در این روش چون ما instance ایجاد می کنیم پس هر چی توی فایل مبدا هست توی فایل مقصد هم نشون داده میشه.برای حل این مشکل چیکار باید کرد؟

تشکر

در اسناد QML هر فایلی می‌تونه به عضو‌ها و خواص فایل‌های والد خودش دسترسی پیدا کنه. اما روش پیشنهادی این هست با تعریف یک QtObject اعضای مورد نظر خودتون رو تعریف کنید تا هر جا داخل هر فایلی که هستین بتونید به اون دسترسی داشته باشید.

به عنوان مثال فایل main.qml

import QtQuick 2.11
import QtQuick.Window 2.11

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    QtObject {
        id:mainObject

        property string name : "Kambiz"
    }

    Page1 { anchors.fill: parent; }

}

و فایل دیگه که با نامPage1.qml هست تنها کافیه درونش شناسه‌ی QtObject رو صدا بزنید. به صورت زیر:

import QtQuick 2.0

Item {

    Text {
        anchors.centerIn: parent
        text: mainObject.name
    }

}

اینجا من مقدار name که به عنوان عضوی از فایل main.qml هست رو صدا زدم و برابر با مقدار نوع Text قرار دادم.

  • پسندیدن 1

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


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

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

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

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

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

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

  • مطالب مشابه

    • توسط کامبیز اسدزاده
      همانطور که می‌دانید محیط توسعه‌ی یکپارچه‌ی نرم‌افزار Visual Studio به عنوان یکی از جامع‌ترین محیط‌های توسعه بسیار شناخته شده است. برنامه‌نویسان سی‌پلاس‌پلاس بسیاری از پروژه‌های خود را تحت این محیط علاوه بر آن کیوت کریتور توسعه می‌دهند. کتابخانه‌ی کیوت افزونه‌ای را برای یکپارچه سازی خود با محیط ویژوال استودیو ارائه داده است که در حالت عادی از کتابخانه‌ی Qt به خوبی پشتیبانی می‌کند و اجازه می‌دهد تا شما کُد‌های خود را که بر اساس کتابخانه‌ی کیوت هستند در محیط ویژوال استودیو توسعه و خروجی بگیرید.
      اما محدودیت‌هایی در این افزونه تا به امروز وجود دارد، یکی از آن‌ها عدم هماهنگی و پشتیبانی از زبان QML بر پایه جاوا اسکریپت است. در نسخه‌ی بعدی کیوت یعنی 5.12.0 افزونه‌ی Qt Visual Studio Tools, v2.3.0 نیز منتشر خواهد شد که با نسخه‌های جدید ویژوال استودیو هماهنگ و به شما امکان اینم را خواهد داد تا بتوانید کد‌های نوشته شده توسط QML و JavaScript را اشکال‌زدایی کنید.
      این امکان وجود خواهد داشت تا شما هر جایی که نقطه‌ی توقف برای اشکال زدایی ایجاد کرده اید را مورد تجزیه تحلیل قرار خواهید داد. از جمله، تغییر تحولات در ارزش‌های متغیر‌ها و دیگر موارد.

      نسخه‌ی جدید این افزونه به طور کامل با زیرساخت اشکال زدایی QML یکپارچه سازی شده است. که به عنوان بخشی از ماژول Qt QML خدماتی برای اشکال زدایی، بررسی و ثبت و ظبط برنامه را از طریق یک پور TCP فراهم می‌کند.




      به صورت پیش‌فرض ویژگی اشکال زدایی در QML برای ویژوال استودیو فعال است. شما می‌توانید آن را در بخش تنظیمات افزونه ویژوال استودیو برای Qt غیرفعال کنید.

      این ابزار را به زودی در بخش دریافت فایل‌ها می‌توانید همزمان با نسخه‌ی ۵.۱۲.۰ کیوت دریافت نمایید.
    • توسط amirb
      با سلام و عرض ادب.
      چطور میشه توی Qt Quick و برای پلتفرم اندروید یک slot یا چیزی شبیه این تعریف کرد که مثلا وقتی دکمه back این پلتفرم زده شد فلان اتفاق رخ بده.
      با تشکر
    • توسط کامبیز اسدزاده
      سلام و درود با طعم کیوت 🤗
      همانطور که می‌دانید توسعه نرم‌افزار‌ها و اپلیکیشن‌های کاربردی در هر پلتفرمی نیازمند ابزار‌ها و کنترل‌های مهمی هستند که این امر موجب سرعت بخشیدن به زمان طراحی می‌شود. در صنایع مختلف برنامه‌نویسی مخصوصاً سمت وِب کیت‌های بسیاری جهت تولید و توسعه سریع همراه با کامپوننت‌های بسیار خوبی ارائه شده است که برخی از آن‌ها عبارتند از Bootstrap، UIkit و غیره...
      ما در نظر داریم کیتی را همانند کیت بوت استرپ برای کیوت کوئیک توسعه دهیم. بنابراین هر کامپوننت یا ماژولی که احساس نیاز از آن می‌شود را برای ما مطرح کنید. ابتدا ما ویژگی‌های بوت استرپ را شبیه سازی خواهیم کرد و سپس کیت‌های مورد نیاز شما را که در تاپیک‌های دیگر اعلان می‌شوند با این کیت ادغام خواهیم کرد.
       
      با توجه به اینکه من شخصاً کیتی را از قبل برای توسعه در نظر گرفته ام نام این پروژه Jupiter انتخاب شده است همان کیت را برای برنامه ریزی در این بخش عنوان می‌کنم تا برای ادامه نیز با همکاری همدیگر توسعه داده شود.
       
      کامپوننت‌ها
      Alerts Ads ActionButton ActivityIndicator Accordion Badges Button CircleButton Card CardInfo CardBox CircleImage CircleProgressBar Dropdown DifficultySection Forms Modal Menu MessageBox Map (Based on Google Map) Marker Navs Navbar Notification Profile Pagination Popovers Progress ProgressCircle Space Share SocialFeed Tooltips Header Footer FontSystem Slider InputBox Rate (Vote) WinButton پیشنهادات شما می‌تواند در این لیست اضافه شود...
      بسیاری از کنترل‌ها در هر زمینه‌ای که نیاز باشد در این لیست اضافه خواهند شد.
      نکته :‌ تمامی کنترل‌ها باید واکنش گرا باشند. این کیت تحت فونت آیکونیک‌های حرفه‌ای fontawesome مجهز خواهد شد. نکته ۲‌ : تمامی کامپوننت‌ها باید تحت قالب راست به چپ و چپ به راست پشتیبانی شوند. نکته ۳ : تمامی کامپوننت‌ها باید به دو زبان فارسی و انگلیسی واکنشگرا و تحت فونت‌های ویژه پشتیبانی شوند.
    • توسط فانوس
      سلام، من دارم پروژه جدید می‌سازم با QML. سوالم اینه که می‌خوام کاربر با زدن دکمه منو صفحه درج کاربر براش باز شه.
      صفحه درج کاربر باید از چه جنسی باشه؟(Qt Quick 2 or QML UI File) در نظر داشته باشید که همگی دارای کد نویسی c++ هستند چجوری با زدن دکمه این صفحه را باز کنم؟ من با ویجت کار کردم اما QML برای بار اولم هست. دیدم که فایل cpp  و .h را باید بسازیم . با ماکروی Q_PROPERRTY مقدار میدید . بعد هم تو فایل QML باید import کنیم. اما خوب چجوری با زدن دکمه بالا بیاد و بسته بشه؟؟؟ طبق چیزی که اینجا نوشته
      Qt Quick UI Forms
      از این ویژگی ها پشتیبانی نمی شود
      JavaScript blocks Function definitions Function calls (except qsTr) Other bindings than pure expressions Signal handlers States in other items than the root item Root items that are not derived from QQuickItem or Item و از این نوع مدل ها هم پشتیبانی نمی کند
      Behavior Binding Canvas Component Shader Effect Timer Transform Transition پس یعنی باید از کوییک 2 استفاده کرد فقط ؟ اما دیدم کوییک 2 را کامپوننت میکنند تو مثال ها.
      الان می گیج شدم . برای ساخت صفحات برنامم باید از چی استفاده کنم؟
      و در آخر کسی پروژه چند صفحه ای دیتابیسی QML نمیشناسه که من بیشتر ازش یاد بگیرم. پروژه دمو یا سمپل
      ممنون
×