View Full Version : یک مشکل در برنامه نویسی با QT
ehsan-11
دوشنبه 27 مرداد 1393, 18:51 عصر
با سلام. یک سوال خیلی ساده داشتم. من میخوام یه کدی در کیوت بنویسم که وقتی کاربر یک عدد دلخواهی را توی یک کادر وارد کرد، یک سری محاسبات روی آن انجام بشه و با فشردن یک کلید، نتیجه ی آن در داخل کادر دیگری نمایش داده بشه. برای این کار، من ابتدا یکی دکمه و همچنین یک QLineEdit برای وارد کردن عدد توسط کاربر و یکی QLable برای مشاهده ی نتیجه (از طریق اشاره گر) درست میکنم. دستور connect را مینویسم که هر موقع کاربر دکمه را فشار داد، اسلات مورد نظر فراخوانده شود و سپس محاسبات لازم انجام گیرد و مقدار حاصله از طریق اشاره گر به QLable فرستاده شود.
مشکل اینجاست که وقتی برنامه به داخل اسلات میرسه، اشاره گر را نمیشناسد و حالا من نمیدونم چه طوری اون اشاره گری را که قبلا داخل کلاس تعریف کرده ام، در داخل اسلات نیز فراخوانی کنم. البته نمیخوام از designer استفاده کنم.
با تشکر
parvizwpf
دوشنبه 27 مرداد 1393, 19:01 عصر
خب کدی که نوشتید رو قرار بدید.
ehsan-11
دوشنبه 27 مرداد 1393, 21:54 عصر
سلام. کد زیر را در کلاس mainwindow نوشتم لطفا ملاحظه کنید:
خطایی که گرفته میشه در قسمت آخر برنامه در داخل تعریف اسلات هست یعنی label->setText("R=2 که میگه اشاره گر label را اینجا نمیشناسه!!!! 122427
alireza es
سه شنبه 28 مرداد 1393, 00:03 صبح
مبحثی هست به نام scope که مطالعه دربارش رو به خودتون واگذار میکنم
فقط شما این قسمتو
Qlabel *label = new Qlabel("R=0")
رو ببرین به فایل هدر و تابع results رو به شکل زیر تغییر بدین
this->label->setText("R=0")
در مورد scope بگم که شما وقتی یه متغیر یا شی تو یه تابع ایجاد میکنین نمیتونین تو توابع دیگه بهش دسترسی داشته باشین
ehsan-11
سه شنبه 28 مرداد 1393, 00:39 صبح
خیلی ممنون درست شد. به عنوان یک راه حل دیگه آیا میشه اشاره گر را به عنوان ورودی به اسلات بدیم تا بتونیم در داخل اسلات به اشاره گر دسترسی داشته باشیم؟ یعنی
( Results(* label
pswin.pooya
سه شنبه 28 مرداد 1393, 08:29 صبح
اشاره گرها رو داخل بدنه کلاس تعریف کنی مشکلت حل میشه.
برای دسترسی به یه اشاره گر یا نمونه کلاس در هر جای برنامه میتونی از Singleton استفاده کنی و یا اینکه اشاره گر رو بصورت extern تعریف کنی. مزیت روش دوم اینه که سرعت دسترسی بالاتر هست اما کنترل شده نیست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.