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

 

posted @ 2020-06-16 21:37  zhengcixi  阅读(1310)  评论(0编辑  收藏  举报
回到顶部