文档章节

Qt中的对话框(模态,非模态,关于,问题,文件)

startstorm
 startstorm
发布于 2017/02/27 22:37
字数 480
阅读 153
收藏 0

项目pro中添加

CONFIG += C++11

mianwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDialog>      //对话框类

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);  
    ~MainWindow();

    QDialog dlg;

};

#endif // MAINWINDOW_H

mianwindow.cpp

#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog> /*文件对话框*/

/*模态对话框和非模态对话框*/

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QMenuBar *mBar = menuBar();
    setMenuBar(mBar);
    QMenu *menu = mBar->addMenu("对话框");
/*模态对话框*/
    QAction *p1 = menu->addAction("模态对话框");
    connect(p1,&QAction::triggered,
           [=]()
            {
                QDialog dlg;
                dlg.exec();
                qDebug() << "1111";
            }


            );
/*非模态对话框*/
    QAction *p2 = menu->addAction("非模态对话框");
    connect(p2,&QAction::triggered,
           [=]()
            {
/*第一种添加成员函数
                dlg.show();
                qDebug() << "1111";*/
/*第二种new一个新对象,没有delete或者Qt成程序结束不会释放空间
                QDialog *p = new QDialog(this);
                p->show();*/
//第三种,设置属性,一般推荐第三种
                QDialog *p = new QDialog();
                p->setAttribute(Qt::WA_DeleteOnClose);
                p->show();
            }
            );
/*关于对话框QMessagebox*/
    QAction *p3 = menu->addAction("关于对话框");
    connect(p3,&QAction::triggered,
           [=]()
            {
               QMessageBox::about(this,"about","关于Qt");
            }
            );
/*问题对话框*/
    QAction *p4 = menu->addAction("问题对话框");
    connect(p4,&QAction::triggered,
           [=]()
            {
               int ret = QMessageBox::question(this,"问题","是否保存",
                                               QMessageBox::Ok |
                                               QMessageBox::Cancel
                                               );
               switch(ret)
               {
                    case QMessageBox::Ok:
                            qDebug()<<"i am ok";
                            break;
                    case QMessageBox::Cancel:
                            qDebug()<<"i am no";
                            break;
                    default:
                            break;
               }
            }
            );
 /*文件对话框*/
    QAction *p5 = menu->addAction("文件对话框");
    connect(p5,&QAction::triggered,
           [=]()
            {
               QString path = QFileDialog::getOpenFileName(
                                            this,
                                            "open",
                                            "../",
                               "source(*.cpp *.h);;Text(*.txt);;All(*.*)"
                                            );
               qDebug() << path;
            }
            );
}

MainWindow::~MainWindow()
{

}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

运行效果,会产生模态对话框,非模态对话框,关于对话框和问题对话框,以及文件对话框。

非模态对话框有三种方法,(1)类的成员方法(2)new一个新对象(3)设置属性,推荐使用第三种。

关于对话框和问题对话框可以设置不同属性。

文件对话框可以筛选文件类型。

截图展示:

 

© 著作权归作者所有

共有 人打赏支持
startstorm
粉丝 6
博文 53
码字总数 21034
作品 0
浦东
程序员
私信 提问
Qt下的模态和非模态对话框

模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。 所谓模态对话框就是在其没有被...

晨曦之光
2012/04/13
682
0
【Qt笔记】对话框简介

对话框是 GUI 程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户...

大道无名
2016/07/29
12
0
Qt 主窗口点击按钮 弹出另一个自定义窗口

为将要进行的工作做准备。 代码实现功能:单击某个按钮后,弹出对话框,对话框中的内容可自行设计。 1. 建立一个主界面,主界面中有一个pushbotton按键。 2.右键项目->添加新文件->Qt设计师界...

m0_37143327
05/10
0
0
【Qt笔记】对话框数据传递

对话框的出现用于完成一个简单的或者是短期的任务。对话框与主窗口之间的数据交互相当重要。本节将讲解如何在对话框和主窗口之间进行数据交互。按照前文的讲解,对话框分为模态和非模态两种。...

大道无名
2016/07/29
21
0
漫谈QWidget及其派生类(四)

漫谈QWidget及其派生类(三)中我们了QMainWindow到底是个什么东西,接下来就看看QDialog吧,没办法,谁让它这么常用呢? 很多人觉得QDialog比QWidget高级很多,为什么呢? QDialog(this) 和 ...

晨曦之光
2012/05/08
494
0

没有更多内容

加载失败,请刷新页面

加载更多

eslint rules 规则

'rules': { "comma-dangle": ["error", "never"], //是否允许对象中出现结尾逗号 "no-cond-assign": 2, //条件语句的条件中不允许出现赋值运算符 "no-console": 2, //不允许出现console语句 ...

agenyun
26分钟前
1
0
类型判断时instanceof和equals的不同用法

接口设计时为了避免序列化的麻烦,将接口定义为参数为map<String,String>类型的接口,但是现在调用时需要转换当前的实体Bean为Map,接口接收方再把Map转换为另一个Bean实体。过程中的需要对类...

wangtx
32分钟前
1
0
vue 组件间传值(个人精编)

1.父组件向子组件传值 1⃣️.子组件标签绑定需要传递的参数名2⃣️.子组件页面使用props 接收参数 2.子组件向父组件传值  1⃣️.子组件使用$emit来触发一个自定义事件,并传递一个参...

MrBoyce
43分钟前
1
0
(荷兰)彼得·冯·门施著:博物馆学研究的目的

博物馆学研究的目的 (荷)彼得·冯·门施 尽管诸多关于博物馆学认知目的的不同看法可以被归纳为数个主要群体,但没有一个群体可以被称为“学派”。一般来说,学派是由于博物馆学研究目的的不...

乔老哥
52分钟前
2
0
Vue slot的用法

之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容。然后就没有理解插槽的概念。其实说白了,使用slot就是先圈一块地,将来...

peakedness丶
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部