模态对话框、非模态对话框、标准对话框、文件对话框

模态对话框 :QDialog

非模态对话框:QDialog

标准对话框(关于对话框、问题对话框等):QMessageBox

文件对话框:QFileDialog

 

标准对话框还有

  1. QColorDialog:       选择颜色;
  2. QFileDialog:        选择文件或者目录;
  3. QFontDialog:        选择字体;
  4. QInputDialog:       允许用户输入一个值,并将其值返回;
  5. QMessageBox:        模态对话框,用于显示信息、询问问题等;
  6. QPageSetupDialog:   为打印机提供纸张相关的选项;
  7. QPrintDialog:       打印机配置;
  8. QPrintPreviewDialog:打印预览;
  9. QProgressDialog:    显示操作过程。

#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 * dialog = mBar->addMenu("对话框");
    QAction * motai = dialog->addAction("模态对话框");
    connect(motai,&QAction::triggered,
            [=]()
            {
                QDialog dlg;
                dlg.exec();
            }
            );

    QAction * feimotai = dialog->addAction("非模态对话框");
    connect(feimotai,&QAction::triggered,
            [=]()
            {
                //这样,闪退,因为内存被释放掉了。
                //QDialog dlg;
                //dlg.show();
                //第一种情况,设为类的私有变量
                //dlg.show();
                //qDebug()<<"非模态对话框";
                //问题,为什么子窗口不关闭
                //第二种情况,动态分配其内存,但是不好,因为会出现内存消耗太多
                //QDialog * dlg = new QDialog(this);
                //dlg->show();
                //第三种情况,动态分配,关闭时释放内存
                QDialog * dlg = new QDialog;
                dlg->setAttribute(Qt::WA_DeleteOnClose);//关闭时释放内存
                dlg->show();
            }
            );
    QAction * p1 = dialog->addAction("关于对话框");
    connect(p1,&QAction::triggered,
            [=]()
            {
                QMessageBox::about(this,"关于qt","qt是一个很好的软件");
            }
            );
    QAction * p2 = dialog->addAction("问题对话框");
    connect(p2,&QAction::triggered,
            [=]()
            {
               int ret = QMessageBox::question(this,"problem","Are you ok?");
               switch(ret)
               {
                    case QMessageBox::Yes:
                        qDebug()<<"I am OK";
                        break;
                    case QMessageBox::No:
                         qDebug()<<"I am Bad";
                         break;
                    default:
                         break;
               }
            }
            );
        connect(p2,&QAction::triggered,
            [=]()
            {
               int ret = QMessageBox::question(this,"problem","Are you ok?",
                                               QMessageBox::Ok|QMessageBox::No|QMessageBox::Cancel);
               switch(ret)
               {
                    case QMessageBox::Ok:
                        qDebug()<<"I am OK";
                        break;
                    case QMessageBox::No:
                         qDebug()<<"I am Bad";
                         break;
                    case QMessageBox::Cancel:
                         qDebug()<<"cancel";
                         break;
                    default:
                         break;
               }
            }
            );
       //文件对话框
    QAction * p3 = dialog->addAction("文件对话框");
    connect(p3,&QAction::triggered,
            [=]()
            {
                QString file_path = QFileDialog::getOpenFileName(this,"openfile","../",
                      "Source(*.cpp *.h);;Text files (*.txt);;all(*.*)");
                qDebug()<<file_path;
            }
            );
    //关闭释放内存
    this->setAttribute(Qt::WA_DeleteOnClose);
}

MainWindow::~MainWindow()
{

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值