مشکل connect در کیوت - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مشکل connect در کیوت

+1 امتیاز

یک form دارم که از Qwidget ارثبری میکنه یک دکمه هم داره ..میخوام وقتی دکمه رو میزنم mainwindow رو نشون بده

myform::myslot()
{
    MainWindow w;
    w.show();
}

توی کانستراکتور myform هم اینو زدم:

QObject::connect(btn,SIGNAL(clicked()),&w,SLOT(myslot()));

 

سوال شده اردیبهشت 10, 1393  بوسیله ی programmer (امتیاز 139)   9 19 32

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

 w رو با اشاره گر و new بساز

myform::myslot()
{
    MainWindow *w=new MainWindow;
    w.setAttribute(Qt::WA_DeleteOnClose);
    w->show();
}

 

خط دوم برای اینه که وقتی که window بسته شد خودکار delete صدا زده شه .

پاسخ داده شده اردیبهشت 11, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد اردیبهشت 11, 1393 بوسیله ی programmer
نمیخوام deleteشه . چه  طوری hideمیشه
QMainWindow یک تابع داره به اسم hide از اون استفاده کن
w->setAttribute منظورته؟
QMainWindow اینو نمیخوام hideکنم.. myform , hide بشه
کد بالا چیزی رو hide نمی کنه ! mainwindow رو نشون میده
اون خط 2 برای وقتیه که mainwindow جدیدی که ساختیم بسته شد خودکار پاک بشه
this->hide() فرم رو مخفی میکنه بزارش داخل همون تابع
اگه بنویسم :
myform::myslot()
{
    MainWindow *w=new MainWindow;
    w.show();
    myform.hide();
}
دارم میگم که this->hide() بنویس نه myform.hide
myfform اسم کلاسه شی که نیست
بعد connect گیرنده چی میشه؟ منظورم w تو کد بالاس
connect باید این شکلی باشه
QObject::connect(btn,SIGNAL(clicked()),this,SLOT(myslot()));
چرا this ??
خب توی constructor اولا که w ای نداریم... w توی button ساخته میشه
بعد این که myslot مال همین کلاسه
چون توی w myslot داره showمیشه خروجی باید:   () mainwindow myslot ???
من منظورتو نمیفهمم خروجی چی ؟ چه ربطی به show شدن w داره ؟
() void myslot که نمیتونه باشه.جای voidچیه
آهان خروجی SLOT رو می گی ؟
نه اتفاقا خروجیش باید همون void باشه  چرا نمی تونه باشه ؟
void myform::myslot ()
{
...

تو فایل .h هم عوضش کن
شد..مرسییی :)
چطوری میتونم بگم mainwindow وسط screen باز بشه؟
w->move(QApplication::desktop()->screen()->rect().center() - w->rect().center());

QDesktopWidget رو هم inculde کن
اگه راست باشه جای centerبذارم right?ارور میده
   QRect screen= QApplication::desktop()->screen()->rect();
   QRect win=dialog.rect();

2 تا مستطیل میدن بهت اولی مستطیلیه که اندازه مانیتور هستش دومی اندازه پنجره برنامه بر اساس اینا یک QPoint میسازی میدی به move
مثلا
   QRect screen= QApplication::desktop()->screen()->rect();
   QRect win=w->rect();
   QPoint p;
   p.setX(screen.width()-win.width());
   p.setY(screen.height()-win.height());
   w->move(p);


لطفا اگر سوال دیگه ای داری توی 1  تاپیک دیگه بپرس .
اینو نفهمیدم
اها فهمیدم..واسه center دیگه نیاز بهx,y نداریم
...