zoukankan      html  css  js  c++  java
  • Qt工具栏的使用

    参考视频:黑马科技:https://www.bilibili.com/video/BV1XW411x7NU?p=19

    对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。

    创建功能时,还是选择QMainwidow,我们自己来实现对话框。

    工程所拥有的文件:

    下面内容讨论的代码,只会在mainwindow.cpp中存在,所有下面给出的代码默认就是再mainwindow.cpp中。

    先创建一个菜单栏: 

    1  模态对话框

    模态对话框,就是会阻塞同一应用程序中其它窗口的输入。

    测试代码:

     1     //创建工具栏并点击“模态对话框”触发一个模态的对话框
     2     QToolBar *toolBar = addToolBar("toolBar");
     3     QAction *model_dialog = toolBar->addAction("模态对话框");
     4     connect(model_dialog, &QAction::triggered,
     5         [=]()
     6         {
     7             QDialog dlg;
     8             dlg.exec();  //一直在这里执行,直到窗口关闭
     9             qDebug() << "model dialog";
    10         }
    11     );

    运行测试:

    只有模态对话框关闭了之后才会打印:"model dialog"。

    2  非模态对话框

    当操作非模态对话框时,我们也可以对主窗口进行操作。

    测试代码:

     1     QAction *modelless_dialog = toolBar->addAction("非模态对话框");
     2     connect(modelless_dialog, &QAction::triggered,
     3         [=]()
     4         {
     5             //这里最好使用动态内存分配,且不要指定父对象,自己回收
     6             QDialog *dlg = new QDialog();
     7             dlg->setAttribute(Qt::WA_DeleteOnClose);
     8             dlg->show();
     9             qDebug() << "modeless dialog";
    10         }
    11     );

    运行测试:

    显示非模态对话框时就会打印“modeless dialog”,而不是关闭非模态对话框时打印。

    3  消息对话框

    QMessageBox用于显示消息提示。

    测试代码:

    1     QAction *message_dialog = toolBar->addAction("消息对话框");
    2     connect(message_dialog, &QAction::triggered,
    3         [=]()
    4         {
    5             //显示关于
    6             QMessageBox::about(this, "about", "关于Qt");
    7         }
    8     );

    运行测试:

    还有一些其它类型的消息对话框,就不在这里说明了。

    4  问题对话框

    QMessageBox::question用于问题对话框。

    测试代码:

     1     QAction *question_dialog = toolBar->addAction("问题对话框");
     2     connect(question_dialog, &QAction::triggered,
     3         [=]()
     4         {
     5             int ret = QMessageBox::question(this, "question", "请选择", QMessageBox::Yes | QMessageBox::No);
     6             switch (ret) {
     7             case QMessageBox::Yes:
     8                 qDebug() << "I am OK!";
     9                 break;
    10             case QMessageBox::No:
    11                 qDebug() << "You choose no!";
    12             default:
    13                 break;
    14             }
    15         }
    16     );

    运行测试:

    选择Yes时,会打印:“I am OK!”,选择No时,会打印:“You choose no!”。

    还有一些其它的问题选择,就不在这里列举了。

    5  文件对话框

    QFileDialog,用于实现文件对话框。

    测试代码:

     1     QAction *file_dialog = toolBar->addAction("文件对话框");
     2     connect(file_dialog, &QAction::triggered,
     3         [=]()
     4         {
     5             QString path = QFileDialog::getOpenFileName(
     6                         this,
     7                         "open",
     8                         "../",
     9                         "source(*.cpp *.h);;"
    10                         "Text(*.txt);;all(*.*)"
    11                         );
    12             qDebug() << path;
    13         }
    14     );

    运行测试:

    当我们选择一个文件打开之后,会打印出文件的路径。

    说一下QFileDialog::getOpenFileName函数,函数原型:

    1 QString getOpenFileName(QWidget * parent = 0,
    2                         const QString & caption = QString(),
    3                         const QString & dir = QString(),
    4                         const QString & filter = QString(),
    5                         QString * selectedFilter = 0,
    6                         Options options = 0)

    参数时可选的,各个参数的含义如下:

    parent:父窗口;

    caption:对话框标题;

    dir:对话框打开时的默认路径;

    filter:过滤器,用于过滤特定的后缀名,多个过滤器之间使用";;"进行分隔;

    selectedFilter:默认选择的过滤器;

    option:对话框的一些参数设定。

    完整代码:

    给出mainwindow.cpp文件的完整代码:

     1 #include "mainwindow.h"
     2 #include <QMenuBar>
     3 #include <QMenu>
     4 #include <QDialog>
     5 #include <QAction>
     6 #include <QToolBar>
     7 #include <QDebug>
     8 #include <QMessageBox>
     9 #include <QFileDialog>
    10 
    11 MainWindow::MainWindow(QWidget *parent)
    12     : QMainWindow(parent)
    13 {
    14     this->resize(600, 500);
    15 
    16     //创建工具栏并点击“模态对话框”触发一个模态的对话框
    17     QToolBar *toolBar = addToolBar("toolBar");
    18     QAction *model_dialog = toolBar->addAction("模态对话框");
    19     connect(model_dialog, &QAction::triggered,
    20         [=]()
    21         {
    22             QDialog dlg;
    23             dlg.exec();
    24             qDebug() << "model dialog";
    25         }
    26     );
    27 
    28     QAction *modelless_dialog = toolBar->addAction("非模态对话框");
    29     connect(modelless_dialog, &QAction::triggered,
    30         [=]()
    31         {
    32             //这里最好使用动态内存分配,且不要指定父对象,自己回收
    33             QDialog *dlg = new QDialog();
    34             dlg->setAttribute(Qt::WA_DeleteOnClose);
    35             dlg->show();
    36             qDebug() << "modeless dialog";
    37         }
    38     );
    39 
    40     QAction *message_dialog = toolBar->addAction("消息对话框");
    41     connect(message_dialog, &QAction::triggered,
    42         [=]()
    43         {
    44             //显示关于
    45             QMessageBox::about(this, "about", "关于Qt");
    46         }
    47     );
    48 
    49     QAction *question_dialog = toolBar->addAction("问题对话框");
    50     connect(question_dialog, &QAction::triggered,
    51         [=]()
    52         {
    53             int ret = QMessageBox::question(this, "question", "请选择", QMessageBox::Yes | QMessageBox::No);
    54             switch (ret) {
    55             case QMessageBox::Yes:
    56                 qDebug() << "I am OK!";
    57                 break;
    58             case QMessageBox::No:
    59                 qDebug() << "You choose no!";
    60             default:
    61                 break;
    62             }
    63         }
    64     );
    65 
    66 
    67     QAction *file_dialog = toolBar->addAction("文件对话框");
    68     connect(file_dialog, &QAction::triggered,
    69         [=]()
    70         {
    71             QString path = QFileDialog::getOpenFileName(
    72                         this,
    73                         "open",
    74                         "../",
    75                         "source(*.cpp *.h);;"
    76                         "Text(*.txt);;all(*.*)"
    77                         );
    78             qDebug() << path;
    79         }
    80     );
    81 
    82 }
    83 
    84 MainWindow::~MainWindow()
    85 {
    86 
    87 }
    View Code
  • 相关阅读:
    泰山之行
    泰山之行
    Java EE (2) -- Java EE 6 Enterprise JavaBeans Developer Certified Expert(1z0-895)
    一、浏览器生成消息(2)
    P1194 买礼物 洛谷
    P1195 口袋的天空 洛谷
    P1546||2627 最短网络 Agri-Net 洛谷||codevs
    P3366 最小生成树【模板】 洛谷
    T2627 村村通 codevs
    【目录】我的原创技术视频教程
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/13148737.html
Copyright © 2011-2022 走看看