Qt学习(4)——标准对话框和文件对话框

目录

模块对话框:

非模块对话框:

标准对话框

问题对话框:

文件对话框:

codes:


对话框分为非模块和模块对话框:区别在于是否只在目前窗口操作。

首先设定菜单:

    QMenuBar *mBar = menuBar();
    setMenuBar(mBar);//设定一下菜单栏,但没有这一行好像也行
    QMenu *menu = mBar->addMenu("对话框");
    QAction *a1 = menu->addAction("模态对话框");

模块对话框:

    QAction *a1 = menu->addAction("模态对话框");
    
    connect(a1, &QAction::triggered,
            [=]()
            {
                QDialog dlg;//创建对话框
                dlg.exec();//等待用户操作
                //qDebug()<<"111";
            }
                
           );

非模块对话框:

    QAction *a2 = menu->addAction("非模态对话框");
    
    connect(a2, &QAction::triggered,
            [=]()
            {
                QDialog dlg;//创建对话框
                dlg.show();
                qDebug()<<"111";
            }
                
           );

这时会发现根本没有对话框出现,因为dlg的生命周期只在表达式内。

要想解决这个问题:1)设定成员变量 ,生命周期与主程序一致  2)动态分配空间 new 程序结束时释放。

但是第二种方法又个有问题,如果该按钮点击多次,内存越占越多;虽然可以不指定父对象解决,但是不指定父对象又无法自动释放,只能手动释放。

但又可以通过设定属性解决。

解决方法:

    connect(a2, &QAction::triggered,
            [=]()
            {
//                QDialog dlg;//创建对话框
//                dlg.show();
//                qDebug()<<"111";
                QDialog *p = new QDialog(this);
                p->setAttribute(Qt::WA_DeleteOnClose);//关闭时释放
                p->show();
            }

标准对话框

预先设定有一些按钮的模板,可以按以下方式查看各种标准对话框:

选择的时候注意枚举类型和函数的区别

    QAction *a3 = menu->addAction("关于对话框");

    connect(a3, &QAction::triggered,
            [=]()
            {
                QMessageBox::about(this,"about","关于Qt");//标题和内容
            }

           );

问题对话框:

可以有两个选项,对不同的选项进行不同处理;

 

查看返回值的参数值:

    QAction *a4 = menu->addAction("问题对话框");

    connect(a4, &QAction::triggered,
            [=]()
            {
                int ret = QMessageBox::question(this,"question","是否保存?");
                //也可以指定选择项:
                /*int ret = QMessageBox::question(this,,"question","是否保存?",
                                                QMessageBox::Ok |
                                                    QMessageBox::Cancel
                                                );*/
                switch(ret)
                {
                    case QMessageBox::Yes:
                        qDebug() << "i am OK";
                        break;
                    case QMessageBox::No:
                        qDebug() << "i am bad";
                        break;
                    default:
                        break;
                }
            }
           );

 

文件对话框:

    QAction *a5 = menu->addAction("文件对话框");

    connect(a5, &QAction::triggered,
            [=]()
            {
                QString path = QFileDialog::getOpenFileName(
                            this,       //父对象
                            "open",     //
                            "../",   //上级目录
                            "source(*.cpp *.h);;"    //筛选文件类型
                            "Text(*.txt);;all(*.*)"
                            );//字符串可以换行,qt补全,自动连接
                qDebug() << path;
            }
           );

codes:

#include "mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#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 *a1 = menu->addAction("模态对话框");

    connect(a1, &QAction::triggered,
            [=]()
            {
                QDialog dlg;//创建对话框
                dlg.exec();//等待用户操作
                //qDebug()<<"111";
            }

           );

    QAction *a2 = menu->addAction("非模态对话框");

    connect(a2, &QAction::triggered,
            [=]()
            {
//                QDialog dlg;//创建对话框
//                dlg.show();
//                qDebug()<<"111";
                QDialog *p = new QDialog(this);
                p->setAttribute(Qt::WA_DeleteOnClose);//关闭时释放
                p->show();
            }

           );

    QAction *a3 = menu->addAction("关于对话框");

    connect(a3, &QAction::triggered,
            [=]()
            {
                QMessageBox::about(this,"about","关于Qt");//标题和内容
            }

           );


    QAction *a4 = menu->addAction("问题对话框");

    connect(a4, &QAction::triggered,
            [=]()
            {
                int ret = QMessageBox::question(this,"question","是否保存?");
                //也可以指定选择项:
                /*int ret = QMessageBox::question(this,,"question","是否保存?",
                                                QMessageBox::Ok |
                                                    QMessageBox::Cancel
                                                );*/
                switch(ret)
                {
                    case QMessageBox::Yes:
                        qDebug() << "i am OK";
                        break;
                    case QMessageBox::No:
                        qDebug() << "i am bad";
                        break;
                    default:
                        break;
                }
            }
           );

    QAction *a5 = menu->addAction("文件对话框");

    connect(a5, &QAction::triggered,
            [=]()
            {
                QString path = QFileDialog::getOpenFileName(
                            this,       //父对象
                            "open",     //
                            "../",   //上级目录
                            "source(*.cpp *.h);;" //筛选文件类型
                            "Text(*.txt);;all(*.*)"
                            );//字符串可以换行,qt补全,自动连接
                qDebug() << path;
            }
           );


}

MainWindow::~MainWindow()
{

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值