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

عدم اجرای سیگنال تغییر مقدار یک متغیر در QML


سوال

برنامم قرار کارت ار اف ایدی بخونه. و البته هم میخونه هر کارتی که کاربر بزنه. کد کارت را در دیتابیس چک میکنه و به کاربر پذیرش و یا عدم پذیرش کارت را اعلام میکنه
مشکلم اینجاست که پروپرتی تعریف کردم که اگر کارت درست بود ستش کنه تورو اگر غلط بود فالس

setacptCard(true);

تو سمت کیو ام ال نوشتم :

UsersCard
    {
        id:uc
    }
    Item {
        id: name
       Connections{
            target: uc
        onAcptCardChanged: {
            console.log("======+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|");
            errpan.visible=true;
        }}

کدم کامل اجرا میشه اما این متد اصلا فایر نمیشه و اجرا نمیکنه:

 onAcptCardChanged: {
            console.log("======+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|");
            errpan.visible=true;

 

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


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

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

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

  • 0

توی تابع ست کردن متغیر سیگنال تغییرش رو فراخوانی کردید ؟

نحوه ارسالتون به کیو ام ال به چه شکل هست ؟

از طرفی اگر کدتون همینی هست که ارسال کردید خب چرا توی تعریف errpan مستقیم برابر با ui.acptCard قرار ندادید ؟

توی تابع

setacptCard(true);

چرا به این صورت نیست ؟

setAcptCard(true);در کل اگر درست تعریف کرده باشید و سیگنال تغییر رو هم توی تابع ست کردن فراخوانی کرده باشید نباید مشکلی باشه.

شاید لازم باشه توی یک پروژه ساده این کار رو انجام بدید و ببینید کار میکنه یا نه اگر کار نکرد که مشخصه روند رو دارید اشتباه میرید و میتونید کمی بیشتر مطالعه کنید تا مشکل حل بشه اما اگر کار کرد و روند با روند توی کد خودتون یکی بود شاید لازم باشه کد اصلی رو دید.

 

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 24 فروردین 1398 در 22:28، بهنام صباغی گفته است :

توی تابع ست کردن متغیر سیگنال تغییرش رو فراخوانی کردید ؟

نحوه ارسالتون به کیو ام ال به چه شکل هست ؟

از طرفی اگر کدتون همینی هست که ارسال کردید خب چرا توی تعریف errpan مستقیم برابر با ui.acptCard قرار ندادید ؟

توی تابع


setacptCard(true);

چرا به این صورت نیست ؟

setAcptCard(true);در کل اگر درست تعریف کرده باشید و سیگنال تغییر رو هم توی تابع ست کردن فراخوانی کرده باشید نباید مشکلی باشه.

شاید لازم باشه توی یک پروژه ساده این کار رو انجام بدید و ببینید کار میکنه یا نه اگر کار نکرد که مشخصه روند رو دارید اشتباه میرید و میتونید کمی بیشتر مطالعه کنید تا مشکل حل بشه اما اگر کار کرد و روند با روند توی کد خودتون یکی بود شاید لازم باشه کد اصلی رو دید.

 

سلام

ممنونم. درست شد. مشکل اینجا بود که زمان خوندن کارت از دستگاه نمیدونم چرا ۵ بار دیتای کارت را برای این صفحه امیت میکرد. بار اول ذخیره می شد اما تا میخواست نشون بده دوباره متدش ران میشد و تو دفعات بعد نمیتونست متد درست کار کنه.

اومدم گفتم اگر بار اول کارت را گرفتی و برای این ایدی ذخیره کردی حالا دوباره همین متد برای همین کارت و همین یوزر داره فراخوانی میشه return کن. حالا داره کار میکنه

باقی کدها درست بود.

ممنونم از وقتی که برام گذاشتید.

  • پسندیدن 1

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


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

کانکشن هاتون مشکل داره راه درستی رو انتخاب نکردین واسه حل مشکل. اگر چیزی داره تغییر می کنه یک بار باید سیگنالش ارسال بشه

  • پسندیدن 1

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 26 فروردین 1398 در 11:56، فانوس گفته است :

سلام

ممنونم. درست شد. مشکل اینجا بود که زمان خوندن کارت از دستگاه نمیدونم چرا ۵ بار دیتای کارت را برای این صفحه امیت میکرد. بار اول ذخیره می شد اما تا میخواست نشون بده دوباره متدش ران میشد و تو دفعات بعد نمیتونست متد درست کار کنه.

اومدم گفتم اگر بار اول کارت را گرفتی و برای این ایدی ذخیره کردی حالا دوباره همین متد برای همین کارت و همین یوزر داره فراخوانی میشه return کن. حالا داره کار میکنه

باقی کدها درست بود.

ممنونم از وقتی که برام گذاشتید.

خواهش میکنم.

خدا رو شکر که حل شد ولی دنبال دلیل باشید و نگذارید بیش از این مشکل توی برنامه باقی بمونه یعنی دلیل چند بار امیت شدن رو متوجه بشید وگرنه جلوتر ممکنه مشکلات مشابهی پیش بیاد و ترکیب این مشکلات با هم غیر قابل حل باشه.

توی یک پروژه تیم قبلی کلی تایمر توی لایه ویو استفاده کرده بود و کل کدها توی یه تایمر کلی بود و خلاصه خیلی بهم ریخته بود سر همین یه سیگنال روشن شدن دستگاه دوبار ارسال میشد برای این که همین مشکل ساده رو حل کنم نزدیک یک هفته ازم وقت گرفت تا انجامش بدم تازه مدام هم گوش به زنگ خطر بودم چون میدونستم اگر مشکل دیگه ای پیش بیاد هیچ تضمینی نیست بشه درستش کرد چون هر تایمر جدا داشت کار میکرد و روی یک قسمت از کد اثر میگذاشت و با توجه به این که کد کثیف بود نمیشد درست سر در آورد و چون زمان پروژه از ددلاین عبور کرده بود وقتی برای ریفکتور کردن کد نبود در صورتی که اگر از همون اول به این مشکلات ریز رسیدگی میکردند این مشکلات پیش نمیاومد.

پیشنهاد من هم برای شما اینه که دقیق سر در بیارید چرا داره چند بار امیت میشه بعد اگر منطقی بود و راهی برای حلش نبود از همین روشی که فعلا استفاده کردید استفاده کنید.

سوالی هم بود بپرسید در خدمتیم.

  • تشکر شده 1

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 30 فروردین 1398 در 16:26، بهنام صباغی گفته است :

خواهش میکنم.

خدا رو شکر که حل شد ولی دنبال دلیل باشید و نگذارید بیش از این مشکل توی برنامه باقی بمونه یعنی دلیل چند بار امیت شدن رو متوجه بشید وگرنه جلوتر ممکنه مشکلات مشابهی پیش بیاد و ترکیب این مشکلات با هم غیر قابل حل باشه.

توی یک پروژه تیم قبلی کلی تایمر توی لایه ویو استفاده کرده بود و کل کدها توی یه تایمر کلی بود و خلاصه خیلی بهم ریخته بود سر همین یه سیگنال روشن شدن دستگاه دوبار ارسال میشد برای این که همین مشکل ساده رو حل کنم نزدیک یک هفته ازم وقت گرفت تا انجامش بدم تازه مدام هم گوش به زنگ خطر بودم چون میدونستم اگر مشکل دیگه ای پیش بیاد هیچ تضمینی نیست بشه درستش کرد چون هر تایمر جدا داشت کار میکرد و روی یک قسمت از کد اثر میگذاشت و با توجه به این که کد کثیف بود نمیشد درست سر در آورد و چون زمان پروژه از ددلاین عبور کرده بود وقتی برای ریفکتور کردن کد نبود در صورتی که اگر از همون اول به این مشکلات ریز رسیدگی میکردند این مشکلات پیش نمیاومد.

پیشنهاد من هم برای شما اینه که دقیق سر در بیارید چرا داره چند بار امیت میشه بعد اگر منطقی بود و راهی برای حلش نبود از همین روشی که فعلا استفاده کردید استفاده کنید.

سوالی هم بود بپرسید در خدمتیم.

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

دلیلش اینه که چون connect مربوط به سیگنال و اسلات را در متد سازنده کلاسم گذاشته بودم. نمیدونم چرا اما زمان که صفحه cpp ایجاد میشد این دستور connect چندین بار اجرا میشد . برای همین ۸ بار امیت مربوط به سیگنال را می خوند.

خلاصه اینکه تابعی نوشتم که کار connect  را انجام بده در زمانی که میخوام و از توی تابع سازنده کلاس بیرون اوردمش و اینکه پارامتر پنجم مربوط به  connect  را هم نوشتم Qt::UniqeConnect فکر کنم بود.

  • پسندیدن 1

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


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

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

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

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

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

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

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

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

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

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

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

×