PDA

View Full Version : سوئیچ بین دو فرم!



2020s1371
یک شنبه 02 شهریور 1393, 19:30 عصر
من تو برنامه م دوتا فرم دارم که توی منوی فرم ۱ ، فرم ۲ رو صدا میزنم به اینگونه:


void Form_1::on_menu_1_triggered()
{
Form_2 *a =new Form_2;

this->setHidden(true);
a->show();


}





حالا برای اینکه موقع خروج از فرم دو، فرم یک setHiddenش فالس شه چکار باید یکنم؟؟

توجه :کلاس و سورس هردو فرم جداست

کامبیز اسدزاده
دوشنبه 03 شهریور 1393, 01:46 صبح
من تو برنامه م دوتا فرم دارم که توی منوی فرم ۱ ، فرم ۲ رو صدا میزنم به اینگونه:


void Form_1::on_menu_1_triggered()
{
Form_2 *a =new Form_2;

this->setHidden(true);
a->show();


}





حالا برای اینکه موقع خروج از فرم دو، فرم یک setHiddenش فالس شه چکار باید یکنم؟؟

توجه :کلاس و سورس هردو فرم جداست

سلام

در فرم قبلی یا اصلی کد زیر رو بنویسید :


Form_1*w =new Form_1;
w->setHidden(false);


البته اشاره کنم در قسمتی که رویداد خروج وجود داره این رو اضافه کنید.

2020s1371
دوشنبه 03 شهریور 1393, 03:10 صبح
سلام

در فرم قبلی یا اصلی کد زیر رو بنویسید :


Form_1*w =new Form_1;
w->setHidden(false);


البته اشاره کنم در قسمتی که رویداد خروج وجود داره این رو اضافه کنید.
اما اینجوری شیءی که از نوع فرم 1 قبلا ساخته شده بود برگردانده و تغییر مخفی بودن نمیده بلکه فقط یه شیء دیگه از اون ساخته میشه! کد داره نیو میکنه !
درست میگم؟؟

کامبیز اسدزاده
دوشنبه 03 شهریور 1393, 11:30 صبح
بله درسته اونقت باید بدون ساختن new از حالت static در فراحوانی فرم اول استفاده کنید که نیازی برای ساخت دوباره اون نیست ولی در هر صورت بعد از close شدن فرم اول new ایجاد شده از بین خواهد رفت.

omid_kma
دوشنبه 03 شهریور 1393, 13:26 عصر
حالا برای اینکه موقع خروج از فرم دو، فرم یک setHiddenش فالس شه چکار باید یکنم؟؟

توجه :کلاس و سورس هردو فرم جداست
1_ داخل سازنده کلاس فرم2 رو با آدرس بگیرید و داخل یک متغیر عضو کلاس بگزارید .
2_ داخل مخرب کلاس متغیری که تعریف کردید رو show کنید

2020s1371
سه شنبه 25 شهریور 1393, 07:23 صبح
دوستان فکر کنم اشکال کار رو پیدا کردم
اگر موقع اضافه کردن فرم نوعش رو غیر دیال انتخاب کنم با کدهایی که نوشتم نمیشه ویجت اصلی رو ازهیدن در اورد ولی اگه دیال انتخاب شه میشه
این کد رو توی هر دو نوع امتحان کردم ولی فقط توی دیال جواب میده:

MainWindow:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}


MainWindow::~MainWindow()
{
delete ui;
}


void MainWindow::on_pushButton_clicked()
{
// this->setHidden(true);
this->setEnabled(false);
Dialog *dl=new Dialog(this);
dl->show();






}





dialog:

#include "dialog.h"
#include "ui_dialog.h"
#include"mainwindow.h"


Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}


Dialog::~Dialog()
{
delete ui;
}


void Dialog::on_pushButton_clicked()
{
// parentWidget()->setHidden(false);
parentWidget()->setEnabled(true);

this->close();
}






توی یک از سایت ها (http://www.qtcentre.org/threads/3465-Difference-between-Dialog-and-widget-and-QMainWindow) هم در این باره بحثی شده بود


این کدی که نوشتم اجرا میشه ولی بصورت خیلی ساده ست
توضیح کد اینکه توی ویجت اصلی یه دکمه هست که باکلیک روی اون میریم تو دیال و ویجت هیددن میشه
توی دیال هم یه دکمه هست که بازدن اون ، دیال بسته و ویجت شو میشه

2020s1371
سه شنبه 25 شهریور 1393, 07:26 صبح
حالا اگه توی یه برنامه که نوشته شده ، نوع ویجت انتخاب شده باشه باید چکار کرد که بشه مثله دیال رفتار کنه؟؟