/******************************************************
* 课程名 :QT编程
* 时 间 :2017年6月1日(周四)上午(前半段)
* 工程名 :03-Dialog
* 类 名 :dialog03
* 内 容 :对话框(第一部分):模态对话框和非模态对话框;槽函数的简介
******************************************************/
一、对话框概述
1.对话框:实现短期任务,简洁的交互,一般以弹出的方式展现
2.分类
- 模 态:在关闭模式对话框之前,程序不能进行其他工作(和父窗口的交互被阻塞)
- 非模态:模式对话框打开后,程序仍然能够进行其他工作(父子窗口可同时和用户交互),如:记事本中的查找对话框
二、模态非模态对话框的实现
目标:点击按钮,弹出新的对话框(模态及非模态)
- 步骤一:在ui界面新建一个Button,并使用“转到槽”自动生成函数Dialog03::on_pushButton_clicked()
- 步骤二:在槽函数中添加以下代码:
//弹出模态对话框方式一:exec() - 会阻塞
void Dialog03::on_pushButton_clicked()
{
qDebug() << "按钮被点击,槽函数运行";
//1.实例化一个对象
Dialog03 dlg ;
//2.弹出
dlg.exec(); //弹出的和原有的一模一样,并阻塞下一条被执行
qDebug() << "模态方式一:此时我执行了";
}
//弹出模态对话框方式二:show() - 不阻塞,但setModal使其阻塞
void Dialog03::on_pushButton_clicked()
{
qDebug() << "按钮被点击,槽函数运行";
Dialog03 *dlg = new Dialog03;
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->setModal(true); //用F1查看QDialog,可知需要将Modal设为true
dlg->show();
qDebug() << "模态方式二:此时我执行了";
}
//弹出非模态对话框
void Dialog03::on_pushButton_clicked()
{
Dialog03 *dlg = new Dialog03 ;
dlg->setAttribute(Qt::WA_DeleteOnClose);
//与"模态对话框方式二"的唯一差别 true->false ;
dlg->setModal(false); //此句不写也可,默认为false
dlg->show();
qDebug()<<"非模态:我被执行了";
}
源代码:http://download.youkuaiyun.com/detail/c_estbon/9860945
作业1:
建立工程,在A界面中添加一个按钮部件pop,点击pop按钮非模态弹出对话框B。
要求:
如果B对话框未弹出,点击pop按钮弹出对话框B;
如果B对话框已经弹出,点击pop按钮让对话框B获得焦点。