方法一:(用于一个父窗口和多个子窗口的处理,不知道怎么用于处理子窗口的子窗口的处理)
1、建立一个父窗口,然后建立一个QDialog类型的窗口作为子窗口
2、在父类窗口建立子窗口的对象
void 父类名::on_pushButton_clicked()
{
this->hide();
子类对象->show();
子类对象->exec(); //当子类对象窗口关闭或隐藏时,执行下面语句
this->show();
}
方法二:(使用connect,可用于父窗口与子窗口还有子窗口的子窗口间的调用,但用于一个父窗口和多个子窗口时,会使代码质量大大降低,复杂化)
建立一个父窗口,然后建立一个QDialog类型的窗口作为子窗口
父窗口.h文件
children_win *cwin = new children_win();
private slots:
void on_pushButton_clicked();
void re_show_pwin();
父窗口.cpp文件
parent_win::parent_win(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::parent_win)
{
ui->setupUi(this);
connect(cwin,SIGNAL(send_cwin()),this,SLOT(re_show_pwin())); //子类对象发送send_cwin()信号给父类,调用re_show_pwin()
}
void parent_win::on_pushButton_clicked()
{
this->hide();
cwin->show();
}
void parent_win::re_show_pwin()
{
this->show();
}
子窗口.h
signals:
void send_cwin();
子窗口.cpp
void children_win::on_pushButton_clicked()
{
this->hide();
emit send_cwin();
}
方法三:(比较好用)
建立一个父窗口,然后建立一个QDialog类的子窗口
父窗口.cpp
#include ""
void parent_win::on_pushButton_clicked()
{
this->hide();
zi *z = new zi(this); //this一定要加上,否则子窗口对象无法指向父类窗口
z->show();
}
子窗口.h
#include ""
fu *f;
子窗口.cpp
zi::zi(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::zi)
{
f = (fu*) parent; //fu指针指向父类窗口
ui->setupUi(this);
}