C/C++ Qt Dialog 对话框组件应用
在Qt中对话框分为两种形式,一种是标准对话框,另一种则是自定义对话框,在一般开发过程中标准对话框使用是最多的了,标准对话框一般包括 QMessageBox,QInputDialog,QFileDialog 这几种,这里我将总结本人在开发过程中常用到的标准对话框的使用技巧。
Qt框架下,常用的标准对话框有下面这几种:
- QMessageBox 提示信息框
- QInputDialog 基本输入对话框(文本输入,整数输入,浮点数输入,单选框输入)
- 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消息框: 无选择");
}
// 弹出关于提示
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 <QMessageBox>
#include <QCloseEvent>
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();
else
event->ignore();
}
// By : LyShark
// https://www.cnblogs.com/lyshark
MainWindow::~MainWindow()
{
delete ui;
}

QInputDialog 对话框: 该对话框长用于输入一段特殊的文本,浮点数,或者选择一个列表框中的选项,该功能用于简单的用户交互场景。
#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);
}
}
// 整数数值输入对话框
// 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 <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(); // 获取系统当前目录
// 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; i<fileList.count();i++)
{
// 循环将文件路径添加到列表中
ui->plainTextEdit->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);
}
}

C/C++ Qt Dialog 对话框组件应用的更多相关文章
- C/C++ Qt 自定义Dialog对话框组件应用
在上一篇博文 <C/C++ Qt 标准Dialog对话框组件应用> 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能. 但有时候我们需要一次性修改多个数据,使用默认 ...
- 第二百零四节,jQuery EasyUI,Dialog(对话框)组件
jQuery EasyUI,Dialog(对话框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解EasyUI中Dialog(窗口)组件的使用方法,这个组件依赖 ...
- Dialog( 对话框) 组件
一. 加载方式//class 加载方式<div class="easyui-dialog" title="My Dialog"style="wi ...
- 关于Element对话框组件Dialog在使用时的一些问题及解决办法
Element对话框组件Dialog在我们的实际项目开发中可以说是一个使用频率较高的组件,它能为我们展示提示的功能,如:业务模块提交前展示我们曾经输入或选择过的业务信息,或者展示列表信息中某项业务的具 ...
- 【golang-GUI开发】struct tags系统(二)qt的自定义组件和构造函数
今天我们来讲讲自定义组件和它的构造函数. 在前面的文章里我们已经接触了好几个自定组件,这次的示例是一个自定义对话框,他有一个about按钮,点击按钮可以显示出Qt的信息或者用户输入的信息.这是效果图: ...
- 【Qt开发】Qt标准对话框之QMessageBox
好久没有更新博客,主要是公司里面还在验收一些东西,所以没有及时更新.而且也在写一个基于Qt的画图程序,基本上类似于PS的东西,主要用到的是Qt Graphics View Framework.好了,现 ...
- 12个QT基本对话框,以及淡入原理(用定时器把窗口逐渐变成透明)
一.基本对话框 1,核心库: 界面程序 QApplication 非程序界面QCoreAppliction 2,消息循环必须执行QApplication.exec(); 3,消息绑定机制: 信号-槽 ...
- QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)
QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...
- 动手实现一个vue中的模态对话框组件
写在前面 对话框是很常用的组件 , 在很多地方都会用到,一般我们可以使用自带的alert来弹出对话框,但是假如是设计 出的图该怎么办呢 ,所以我们需要自己写一个对话框,并且如果有很多地方都用到,那我们 ...
随机推荐
- js--typeof 和 instanceof 判断数据类型的区别及开发中的使用
前言 日常的开发中,我们经常会遇到判断一个变量的数据类型或者该变量是否为空值的情况,你是如何去选择判断类型的操作符的?本文来总结记录一下我们开发人员必须掌握的关于 typeof 和 instanceo ...
- 重庆邮电大学第十一届ACM程序设计竞赛-网络选拔赛 C题
1008: 偷袭 时间限制: 1.000 sec 内存限制: 128 MB 武林要以和为贵,张麻子不讲武德来偷袭马老师的亲传弟子. 马老师有n个亲传弟子,每个弟子有一个武力值a[i]. n个弟子中只有 ...
- NX二次开发-调内部函数UGS::UICOMP_enum::set_width(int)更改BlockUI的枚举控件宽度
版本 NX11+VS2013 内容说明 这个内部函数的设置方法,我之前不会,是QQ群里的一位大佬分享出来的. 关于这块,我也百度搜了一下,找到了几个相关的. 1.直接手动修改BlockUI界面 在低版 ...
- kviy TextInput 触发事件
from kivy.uix.widget import Widget from kivy.app import App from kivy.lang import Builder Builder.lo ...
- 【二食堂】Beta - 测试报告
Beta - 测试报告 测试过程中发现的bug Beta阶段的新bug 我们在Beta阶段的开发过程中就进行了测试,发现了许多bug.这其中后端的bug比较多,在这里我列举一些比较重要的功能性bug. ...
- hystrix的dashboard和turbine监控
当我们的应用程序使用了hystrix后,每个具体的hystrixCommand命令执行后都会产生一堆的监控数据,比如:成功数,失败数,超时数以及与之关联的线程池信息等.既然有了这些监控数据数据,那么我 ...
- 【SDOI2014】数数(补)
见 AC自动机(补坑了) [SDOI2014] 数数 简要题意: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为子串.例如当S={22,333,0233}时 ...
- 2021.10.7 NKOJ周赛总结
Ⅰ. 自描述序列 问题描述: 序列 1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,... 看似毫无规律,但若我们将相邻的数字合并 : 1,22,11,2,1,22,1 ...
- 用STM32内置的高速ADC实现简易示波器
做一个数字采样示波器一直是我长久以来的愿望,不过毕竟这个目标难度比较大,涉及的方面实在太多,模拟前端电路.高速ADC.单片机.CPLD/FPGA.通讯.上位机程序.数据处理等等,不是一下子就能成的,慢 ...
- 实验 1: SDN拓扑实践
(图片和文档是自己写的,因为在CSDN也写了,所以会有自己的水印) 一.实验目的 能够使用源码安装Mininet: 能够使用Mininet的可视化工具生成拓扑: 能够使用Mininet的命令行生成特定 ...