C/C++?Qt?Dialog?對話框組件應(yīng)用技巧
在Qt中對話框分為兩種形式,一種是標準對話框,另一種則是自定義對話框,在一般開發(fā)過程中標準對話框使用是最多的了,標準對話框一般包括 QMessageBox,QInputDialog,QFileDialog 這幾種,這里我將總結(jié)本人在開發(fā)過程中常用到的標準對話框的使用技巧。
Qt框架下,常用的標準對話框有下面這幾種:
- QMessageBox 提示信息框
- QInputDialog 基本輸入對話框(文本輸入,整數(shù)輸入,浮點數(shù)輸入,單選框輸入)
- QFileDialog 文件選擇對話框(選擇文件,多選文件,保存文件)
QMessageBox 消息彈窗: 消息對話框用于提示用戶,常見的有四種分別是:提示,警告,錯誤,確認,代碼歸納如下所示。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } // By : LyShark // https://www.cnblogs.com/lyshark // 彈出各種MessageBox void MainWindow::on_pushButton_clicked() { QString dlgTitle="消息框"; QString strInfo="文件已被修改,是否保存修改 ?"; QMessageBox::StandardButton defaultBtn = QMessageBox::NoButton; // 缺省按鈕 QMessageBox::StandardButton result; // 返回選擇的按鈕 // 彈窗分類 Question information warning critical result=QMessageBox::question(this, dlgTitle, strInfo,QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,defaultBtn); if (result==QMessageBox::Yes) ui->plainTextEdit->appendPlainText("Question消息框: Yes 被選擇"); else if(result==QMessageBox::No) ui->plainTextEdit->appendPlainText("Question消息框: No 被選擇"); else if(result==QMessageBox::Cancel) ui->plainTextEdit->appendPlainText("Question消息框: Cancel 被選擇"); else ui->plainTextEdit->appendPlainText("Question消息框: 無選擇"); } // 彈出關(guān)于提示 void MainWindow::on_pushButton_2_clicked() { QString dlgTitle="about 消息框"; QString strInfo="我開發(fā)的數(shù)據(jù)查看軟件 V1.0 \n 保留所有版權(quán)"; QMessageBox::about(this, dlgTitle, strInfo); }
QMessageBox 退出事件: 彈窗組件還可以配合QCloseEvent實現(xiàn)事件通知機制,例如當窗體被關(guān)閉則提示用戶是否關(guān)閉窗體。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QCloseEvent> MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); } // 窗口關(guān)閉時詢問是否退出 void MainWindow::closeEvent(QCloseEvent *event) { QMessageBox::StandardButton result=QMessageBox::question(this, "確認", "確定要退出本程序嗎?", QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel, QMessageBox::No); if (result==QMessageBox::Yes) event->accept(); else event->ignore(); } // By : LyShark // https://www.cnblogs.com/lyshark MainWindow::~MainWindow() { delete ui; }
QInputDialog 對話框: 該對話框長用于輸入一段特殊的文本,浮點數(shù),或者選擇一個列表框中的選項,該功能用于簡單的用戶交互場景。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QLineEdit> #include <QInputDialog> MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } // 文本輸入對話框 void MainWindow::on_pushButton_clicked() { QString dlgTitle="輸入文字對話框"; QString txtLabel="請輸入文件名"; QString defaultInput="新建文件.txt"; QLineEdit::EchoMode echoMode=QLineEdit::Normal; // 正常文字輸入 // QLineEdit::EchoMode echoMode=QLineEdit::Password; // 密碼輸入 bool flag = false; QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &flag); if (flag && !text.isEmpty()) { ui->plainTextEdit->appendPlainText(text); } } // 整數(shù)數(shù)值輸入對話框 // By : LyShark // https://www.cnblogs.com/lyshark void MainWindow::on_pushButton_2_clicked() { QString dlgTitle="輸入整數(shù)對話框"; QString txtLabel="設(shè)置字體大小"; int defaultValue=ui->plainTextEdit->font().pointSize(); // 現(xiàn)有字體大小 int minValue=6, maxValue=50, stepValue=1; // 范圍(步長) bool flag=false; int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,stepValue,&flag); if (flag) { QFont font=ui->plainTextEdit->font(); font.setPointSize(inputValue); ui->plainTextEdit->setFont(font); } } // 浮點數(shù)輸入對話框 void MainWindow::on_pushButton_3_clicked() { QString dlgTitle="輸入浮點數(shù)對話框"; QString txtLabel="輸入一個浮點數(shù)"; float defaultValue=3.13; float minValue=0, maxValue=10000; // 范圍 int decimals=2; // 小數(shù)點位數(shù) bool flag=false; float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,decimals,&flag); if (flag) { QString str=QString::asprintf("輸入了一個浮點數(shù):%.2f",inputValue); ui->plainTextEdit->appendPlainText(str); } } // 單選框條目選擇對話框 void MainWindow::on_pushButton_4_clicked() { QStringList items; // 列表內(nèi)容 items <<"優(yōu)秀"<<"良好"<<"合格"<<"不合格"; // 放入列表 QString dlgTitle="條目選擇對話框"; QString txtLabel="請選擇級別"; int curIndex=0; //初始選擇項 bool editable=false; // 是否可編輯 bool flag=false; QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&flag); if (flag && !text.isEmpty()) { ui->plainTextEdit->appendPlainText(text); } }
QFileDialog 對話框: 該對話框用于對文本的操作,例如打開文件,保存文件,選擇文件夾等,當點擊選擇后,對話框會自動提取出文件路徑。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } // 選擇單個文件對話框 void MainWindow::on_pushButton_clicked() { QString curPath=QDir::currentPath(); // 獲取系統(tǒng)當前目錄 // QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑 QString dlgTitle="選擇一個文件"; // 對話框標題 QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件過濾器 QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter); if (!aFileName.isEmpty()) { ui->plainTextEdit->appendPlainText(aFileName); } } // 選擇多個文件對話框 // By : LyShark // https://www.cnblogs.com/lyshark void MainWindow::on_pushButton_2_clicked() { // QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑 QString curPath=QDir::currentPath(); // 獲取系統(tǒng)當前目錄 QString dlgTitle="選擇多個文件"; // 對話框標題 QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件過濾器 QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter); for (int i=0; i<fileList.count();i++) { // 循環(huán)將文件路徑添加到列表中 ui->plainTextEdit->appendPlainText(fileList.at(i)); } } // 選擇文件夾 void MainWindow::on_pushButton_3_clicked() { QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑 // QString curPath=QDir::currentPath(); // 獲取系統(tǒng)當前目錄 // 調(diào)用打開文件對話框打開一個文件 QString dlgTitle="選擇一個目錄"; // 對話框標題 QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly); if (!selectedDir.isEmpty()) { ui->plainTextEdit->appendPlainText(selectedDir); } } // 保存文件對話框 void MainWindow::on_pushButton_4_clicked() { QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑 QString dlgTitle="保存文件"; // 對話框標題 QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; // 文件過濾器 QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter); if (!aFileName.isEmpty()) { ui->plainTextEdit->appendPlainText(aFileName); } }
到此這篇關(guān)于C/C++ Qt Dialog 對話框組件應(yīng)用的文章就介紹到這了,更多相關(guān)C++ 對話框組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VS2022永久配置OpenCV開發(fā)環(huán)境的實現(xiàn)
本文主要介紹了VS2022永久配置OpenCV開發(fā)環(huán)境的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02vc提示unexpected end of file found的原因分析
這篇文章主要介紹了vc提示unexpected end of file found的原因分析,給出了幾點常見錯誤原因的分析,需要的朋友可以參考下2015-05-05C++ Boost PropertyTree解析INI文件詳解
Boost PropertyTree庫不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過Boost PropertyTree解析INI文件,需要的可以參考一下2022-01-01C++?LeetCode1769移動所有球到每個盒子最小操作數(shù)示例
這篇文章主要為大家介紹了C++?LeetCode1769移動所有球到每個盒子所需最小操作數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12數(shù)據(jù)結(jié)構(gòu)之位圖(bitmap)詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之位圖詳解,本文講解了位圖的基本知識、位圖的實現(xiàn)方法、位圖的應(yīng)用等內(nèi)容,需要的朋友可以參考下2014-08-08