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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM