622 سوال

629 پاسخ

855 نظر

242 کاربر

به سامانه پرسش و پاسخ کیوت خوش آمدید, این سامانه به شما امکان می دهد پرسشهای خود را طرح نموده و در کوتاهترین زمان ، پاسخ خود را دریافت نمایید.

-قبل از سوال پرسیدن حتما جست و جو کنید.

-در صورتی که سوالی به شما کمک کرد و یا جوابی ، حتما به آن امتیاز مثبت دهید.

-در صورتی که سوالی پرسیدید و جواب خود را گرفتید حتما جواب را به عنوان بهترین جواب انتخاب کنید.

-از ارسال چند سوال در یک تاپیک جدا خودداری کنید.

-نام مناسب برای سوالات انتخاب کنید.

-برچسب مناسب برای سوالات انتخاب کنید.

-برای نوشتن کد کافی است کد را از ادیتور خود کپی و در ادیتور سایت الصاق کنید و با انتخاب کد کلید CTRL+K را فشار دهید.

-حتما قوانین و نکات دیگر را از اینجا بخوانید.

چگونه میشود با کلیک بر روی یک object نام آن را بدست آورد در mouseEvent

+1 دیدگاه
76 بازدید

object با کد در اول برنامه ساخته میشود(مثلا یک label)

سوال شده تیر 15, 1392 در Qt Widgets  بوسیله ی a3459 (1,100 امتیاز)  
13% درصد پذیرش جواب ها

2 پاسخ

+2 امتیاز

توی mouseReleaseEvent یا هر event دیگه MainWindow با تابع childAt می تونی که اشاره گر اون ویدجت که روش event رخ داده رو به دست بیاری. و منظورت از this فک کنم استفاده در سازنده QMainWndow باشه که به راحتی با this->childAt(x,y) به دست میاد. اگه Parent در کار نبود فک کنم qApp->widgetAt(x,y) ok باشه.

QWidget * QWidget::childAt(const QPoint & p) const
QWidget * QApplication::widgetAt(const QPoint & point) [static]
پاسخ داده شده تیر 15, 1392 بوسیله ی qtmil کیومن (10,340 امتیاز)  
ممنون ولی جواب سوال من نبود
اگه روی button  کلیک بشه میگه این button هست؟
من کدی مد نظرمه اینه که بگه رو چ آبجکتی کلیک کردی
سوال اول شما این بود که چطور اسم object رو بدست بیاری. فک کنم منظورت از اسم , type یا نوع ویجت هست(مثلا button یا label)  همونطور که گفتم childAt() اشاره گر به ویدجت بر میگردونه حالا اون ویدجت هر چی میخواد باشه با metaObject میتونی به نوع و اطلاعات دیگه ویجت دسترسی پیدا کنی. مثال
QMessageBox::information
(this,"",this->childAt(e->x(),e->y())->metaObject()->className());
میگه که الان مثلا روی QLabel یا QPushButton کلیک شده فقط کافیه کد بالا رو توی event ماوس کپی کنی
+1 دیدگاه

برای این کار اول باید یک اسم به object خود بدهید بعد می توانید از این اسم استفاده کنید

QLabel *myLabel = new QLable("salam")
myLabel->setObjectName("myLabel")

و برای بدست آوردن اسم هم از

myLabel->ObjectName()

می توانید استفاده کنید

پاسخ داده شده تیر 15, 1392 بوسیله ی alirezabe کیومن (4,230 امتیاز)  
ممنون.منظور من چیز دیگه ای بود
QLabel *myLabel = new QLable("salam")
myLabel->setObjectName("myLabel")
این کد را در this  برنامه مینویسم
کد ()myLabel->ObjectName د ر  mouseEvent  میخوام بنویسم
در ضمن من نمیدونم کاربر من حتما بر روی label کلیک کرده
کدی که مد نظرمه بدست آوردن نام هر  object  که من بر روش کلیک میکنمه
همون راهی که علیرضا گفت درسته. فقط کافیه کد اول رو جایی بذاری که قراره لیبل ساخته بشه و کد دوم رو در تابع mouseReleaseEvent کلاس MyLabel خودت که کلاسیه که از QLabel ارث برده. بخش Event Processing وبلاگ رو ببین.
...