这里我要实现的是一个由多个窗口组成而且各个窗口之间可以切换的程序。
实现之前必须了解一些必备知识;
模态和非模态对话框的概念:
简单来说就是模态对话框,对话框之间相互不交互,例如退出提示框,而非模态对话框之间相互交互,譬如查找功能。
信号和槽的概念。
简单来说就是,当单击窗口上的一个按钮想要弹出一个对话框,单击这个按钮就会发射一个信号,然后执行槽来显示一个对话框。换句话说就是button的回调函数。。具体深入了解我们往后可以获知,先了解到这。
我们来实现一个自定义对话框,单击第一个按钮进入另一个窗口,单击退出按钮退出。
1..首先,用.ui设计模式设计出两个按钮的界面。然后单击设计器上方的“编辑信号/槽”图标,或者按下快捷键F4进入部件的信号和槽的编辑模式。我在退出按钮设置选择,步骤如图:
然后就可以绑定退出按钮与退出功能。
2..现在设置“进入主界面”按钮的信号和槽的关联。
回到编辑模式。快捷键F3。
然后右键第一个按钮选择转到槽,选择click()并确定。如图:
然后自动创建on_pushButton_clicked()函数并跳转到此。
这里面我们编写:
void Dialog::on_pushButton_clicked()
{
accept();
}
也就是说,当这个按钮被按下的时候,执行accept()函数。而accpet()函数也是一个回调函数,也是一个槽。使用exec()函数会返回QDialog::Accepted值。换句话说就是使用这个值来判断是哪个按钮被按下了。
我们再新建一个新的.ui文件,内容如下:
这个作为主界面,还有一个返回按钮
然后在主函数的代码:
int main(int argc,char **argv){
QApplication a(argc,argv);
MainWindow w;//创建主界面
Dialog d;//创建对话框。
if(d.exec() == QDialog::Accepted){//当按钮“进入主界面”被按下则执行
w.show();
return a.exec();
}
return 0;//否则退出程序
}
这个时候就可以运行,点击进入主界面会直接进主界面,但是主界面的按钮还没绑定信号与槽。
3..现在来绑定主界面的按钮。
主界面的按钮的槽:
#include<dialog.h>
void MainWindow::on_pushButton_clicked()
{
close();
Dialog d;
if(d.exec() == QDialog::Accepted)
show();
}
PS:需要注意的是close()槽,它不一定让程序退出,只有当最后一个主界面调用