C/C++ Qt 标准Dialog对话框组件应用
创始人
2024-04-26 18:28:53
0

在Qt中对话框分为两种形式,一种是标准对话框,另一种则是自定义对话框,在一般开发过程中标准对话框使用是最多的了,标准对话框一般包括 QMessageBox,QInputDialog,QFileDialog 这几种,这里我将总结本人在开发过程中常用到的标准对话框的使用技巧。

Qt框架下,常用的标准对话框有下面这几种:

  • QMessageBox 提示信息框
  • QInputDialog 基本输入对话框(文本输入,整数输入,浮点数输入,单选框输入)
  • QFileDialog 文件选择对话框(选择文件,多选文件,保存文件)

QMessageBox 消息弹窗: 消息对话框用于提示用户,常见的有四种分别是:提示,警告,错误,确认,代码归纳如下所示。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 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 criticalresult=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 被选择");elseui->plainTextEdit->appendPlainText("Question消息框: 无选择");
}// 弹出关于提示
void MainWindow::on_pushButton_2_clicked()
{QString dlgTitle="about 消息框";QString strInfo="我开发的数据查看软件 V1.0 \n 保留所有版权";QMessageBox::about(this, dlgTitle, strInfo);
}

QMessageBox 退出事件: 弹窗组件还可以配合QCloseEvent实现事件通知机制,例如当窗体被关闭则提示用户是否关闭窗体。

#include "mainwindow.h"
#include "ui_mainwindow.h"#include 
#include MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
}// 窗口关闭时询问是否退出
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();elseevent->ignore();
}// By : LyShark
// https://www.cnblogs.com/lyshark
MainWindow::~MainWindow()
{delete ui;
}

QInputDialog 对话框: 该对话框长用于输入一段特殊的文本,浮点数,或者选择一个列表框中的选项,该功能用于简单的用户交互场景。

#include "mainwindow.h"
#include "ui_mainwindow.h"#include 
#include 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);}
}// 整数数值输入对话框
// By : LyShark
// https://www.cnblogs.com/lyshark
void MainWindow::on_pushButton_2_clicked()
{QString dlgTitle="输入整数对话框";QString txtLabel="设置字体大小";int defaultValue=ui->plainTextEdit->font().pointSize();   // 现有字体大小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);}
}// 浮点数输入对话框
void MainWindow::on_pushButton_3_clicked()
{QString dlgTitle="输入浮点数对话框";QString txtLabel="输入一个浮点数";float defaultValue=3.13;float minValue=0, maxValue=10000;  // 范围int decimals=2;                    // 小数点位数bool flag=false;float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,decimals,&flag);if (flag){QString str=QString::asprintf("输入了一个浮点数:%.2f",inputValue);ui->plainTextEdit->appendPlainText(str);}
}// 单选框条目选择对话框
void MainWindow::on_pushButton_4_clicked()
{QStringList items;                        // 列表内容items <<"优秀"<<"良好"<<"合格"<<"不合格";    // 放入列表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 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();                                       // 获取系统当前目录
//  QString  curPath=QCoreApplication::applicationDirPath();                   // 获取应用程序的路径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();                // 获取应用程序的路径QString curPath=QDir::currentPath();                                      // 获取系统当前目录QString dlgTitle="选择多个文件";                                            // 对话框标题QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件过滤器QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);for (int i=0; iplainTextEdit->appendPlainText(fileList.at(i));}
}// 选择文件夹
void MainWindow::on_pushButton_3_clicked()
{QString curPath=QCoreApplication::applicationDirPath();    // 获取应用程序的路径// QString curPath=QDir::currentPath();                    // 获取系统当前目录// 调用打开文件对话框打开一个文件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();                  // 获取应用程序的路径QString dlgTitle="保存文件";                                              // 对话框标题QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; // 文件过滤器QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);if (!aFileName.isEmpty()){ui->plainTextEdit->appendPlainText(aFileName);}
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...