QT—5种标准对话框使用详解

news2024/9/28 17:29:07

对话框是 GUI 程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。所谓标准对话框,是 Qt 内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。这些对话框在所有程序中几乎相同。

Qt常用的内置对话框有QFileDialog、QColorDialog、QFontDialog、QInputDialog和QMessageBox。下面对这些对话框做一些简单示例。

对话框类

说明

静态函数

函数说明

QFileDialog

文件对话框

getOpenFileName()

选择打开一个文件

getOpenFileNames()

 选择打开多个文件

getSaveFileName()

选择保存一个文件

getExistingDirectory()

选择一个己有的目录

getOpenFileUrl()

选择打幵一个文件,可选择远程网络文件

QColorDialog

颜色对话框

getColor()

选择颜色

QFontDialog

字体对话框

QFont getFont()

选择字体

QInputDialog

输入对话框

getText()

输入单行文字  

getlnt()

输入整数

getDouble()

输入浮点数

getltem()

从一个下拉列表框中选择输入

getMultiLineText()

输入多行字符串

QMessageBox

消息框

information()

信息提示对话框

question()

询问并获取是否确认的对话框

waming()

警告信息提示对话框

critical()

错误信息提示对话框

about()

设置自定义信息的关于对话框

aboutQt()

关于Qt的对话框

QFileDialog文件对话框 

文件对话框可以通过调用QFileDialog::getOpenFileName方法实现,方法的第一个参数指定窗体的父窗体、第二个参数指定窗体的标题、第三个参数指定窗体的打开目录、第四个参数用于限定打开的文件类型,有多个类型时中间用;;隔开。下面程序演示了当用户点击按钮后会弹出文件对话框,之后将用户选择的文件路劲显示在文本框中。

//文件对话框
void Dialog::ShowFileDlg()
{
    //打开文件对话框
    //函数返回打开的路径
    QString sPath = QFileDialog::getOpenFileName(
                this,//指定父窗口
                "标准文件对话框",//打开文件对话框的标题
                ".",//打开目录,"." 表示当前目录
                "C++ files(*.cpp);;"
                 "C files(*.c);;"
                "Header files(*.h)"//设置文件过滤器,有多个条件时中间以两个;;隔开
                );
    m_fileEdit->setText(sPath);
}

m_fileEdit是一个QLineEdit部件名,用来显示用户打开文件的路径。 

 QColorDialog颜色对话框

颜色对话框可以通过调用QColorDialog::getColor方法实现,方法的第一个参数表示默认选择的颜色。该方法会返回一个颜色类。

void Dialog::ShowColorDlg()
{
    QColor color = QColorDialog::getColor(
                Qt::yellow//默认选择的颜色
                );
    //判断颜色选择是否合法
    if(color.isValid()){
        //设置边宽颜色
        m_colorFrame->setPalette(QPalette(color));
    }
}

 m_colorFram是一个QFrame类型,用来展示用户选择的颜色

QFontDialog字体对话框

字体对话框可以通过调用QFontDialog::getFont方法实现,该方法需要传入一个bool类型的参数用来接收函数是否成功执行,方法会返回一个字体字体类。

//字体对话框
void Dialog::ShowFontDlg()
{
    bool ok;//接收函数是否执行成功
    QFont font = QFontDialog::getFont(
                    &ok//接收函数是否执行成功
                );
    if(ok){
        //设置字体
        m_fontEdit->setFont(font);
    }
}

 m_fontEdit是一个QLineEdit类型,用来展示用户选择的字体效果

QInputDialog输入对话框

设置姓名,可以调用的是QInputDialog::getText( )方法用来获取输入的单行文本。方法的第一个参数指定父窗体,第二个参数指定对话框的标题,第三个参数指定对话框显示的内容,第四个参数纸档输入框的模式,第五个参数指定默认值,第六个参数是一个bool类型用来接收函数是否执行成功。

//文本输入对话框
void InputDlg::editName(){
    bool ok;
    QString strName = QInputDialog::getText(
                this,//指定父窗体
                "标准文本输入对话框",//指定对话框标题
                "请编辑姓名",//提示字符串
                QLineEdit::Normal,//输入框显示模式
                m_nameLabel->text(),//输入框的默认文本
                &ok//接收函数调用是否成功
                //最后一个参数表示窗体风格,这里采用默认的
                );
    if(ok && !strName.isEmpty()){
        m_nameLabel->setText(strName);
    }

}

设置性别,可以调用的是QInputDialog::getItem( ) 方法用来获取用户从下拉列表选择的值。QInputDialog第三个参数用来设置下拉列表框,要传入一个QStringList类型的值。

//条目输入对话框
void InputDlg::editSex(){
    QStringList sexList;
    bool ok;
    sexList<<"男"<<"女"<<"未知";
    //可选项是QString 类型,接收也是QString
    QString strSex = QInputDialog::getItem(
                this,
                "标准条目输入对话框",//指定对话框标题
                "请选择性别",    //指定显示内容
                sexList,//设置可选项,可选项是一个QStringList类型
                0,//设置默认选选项
                false,//是否可编辑
                &ok//接收函数是否调用成功
                );
    if(ok && !strSex.isEmpty()){
        m_sexLabel->setText(strSex);
    }
}

设置年龄,可以调用QInputDialog::getInt方法用来获取用户填入的整数值。getInt方法的第四个参数和第五个参数分别用来设置整数的最小值和最大值,第六个参数用来设置步长,即点击增加按钮时每次增加的值。

void InputDlg::editAge(){
    bool ok;
    int age = QInputDialog::getInt(
                this,
                "标注int数据类型输入对话框",//对话框标题
                "请编辑年龄",//对话框显示的内容
                m_ageLabel->text().toInt(),//默认值
                0,//最小值
                120,//最大值
                1,//步长
                &ok//接收函数是否调用成功
                );
    if(ok){
        m_ageLabel->setText(QString("%1").arg(age));
    }
}

设置分数,可以调用QInputDialog::getDouble方法用来获取用户填入的浮点数值。getDouble方法的第四个参数和第五个参数分别用来设置整数的最小值和最大值,第六个参数用来设置精度,即点数据的小数位。

void InputDlg::editScore(){
    bool ok;
    double score = QInputDialog::getDouble(
                this,//设置父窗体
                "标准double数据类型输入对话框",//对话框标题
                "请编辑分数",//对话框显示的内容
                m_scoreLabel->text().toDouble(),//默认值
                0,//最小值
                100,//最大值
                1,//精度
                &ok//接收函数是否执行成功
                );
    if(ok){
        m_scoreLabel->setText(QString::number(score));
    }
}

QMessageBox消息框

问题消息框,可以调用QMessageBox::question() 显示问题消息框,问题消息框可设置要显示的按钮,方法会返回一个枚举类型表示用户所点击的按钮。这里设置的是“确定”和“取消”按钮。

void MsgBoxDlg::showQuestionMsgDlg() {
    m_tipLabel->setText("问题消息框");
    int res = QMessageBox::question(
                this,//指定父窗体
                "问题消息框",//指定标题
                "已打开问题消息框,是否关闭?",//显示的文本
                QMessageBox::Ok|QMessageBox::Cancel,//标注按钮
                QMessageBox::Ok//默认选择的按钮
                );
    switch (res) {
    case QMessageBox::Ok:
        m_tipLabel->setText("问题消息框 - 确定");
        break;
    case QMessageBox::Cancel:
        m_tipLabel->setText("问题消息框 - 取消");
        break;
    default:
        break;
    }
}

信息消息框,可以调用QMessageBox::information( )方法实现,信息消息框的作用是给用户展示一段消息,无需用户做出操作,函数参数也比较简单。

void MsgBoxDlg::showInformationMsgDlg() {
    m_tipLabel->setText("信息消息框");
    QMessageBox::information(
                this,//父窗体
                "信息提示框",//标题
                "这是个信息提示框"//文本内容
                );
}

警告消息框,可以调用QMessageBox::waring方法,警告消息框同样可以设置消息框的按钮,方法会一个枚举类型表示用户的操作。这里设置的是“保存”、“忽视”和“取消”按钮。

void MsgBoxDlg::showWarningMsgDlg() {
    m_tipLabel->setText("警告消息框");
    int res = QMessageBox::warning(
                this,//父窗体
                "警告消息框",//标题
                "有为保存的文件",//警告内容
                QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
                QMessageBox::Save//默认选择的按钮
                );
    switch (res) {
    case QMessageBox::Save:
        m_tipLabel->setText("警告提示框 - 保存");
        break;
    case QMessageBox::Discard:
        m_tipLabel->setText("警告提示框 - 忽视");
        break;
    case QMessageBox::Cancel:
        m_tipLabel->setText("警告提示框 - 取消");
        break;
    default:
        break;
    }
}

错误消息框,可以调用QMessageBox::critical方法,错误消息框也相当于一种消息提醒,会比信息消息框的效果显目,调用方法和信息消息框类似。

void MsgBoxDlg::showCriticalMsgDlg() {
    m_tipLabel->setText("错误消息框");
    QMessageBox::critical(
                this,//父窗体
                "错误消息框",//标题
                "发生重大错误!!"//显示内容
                );
}

关于消息框,调用QMessageBox::about方法,关于消息框也是一种消息提醒,调用方法与信息消息框类似。

void MsgBoxDlg::showAboutMsgDlg() {
    m_tipLabel->setText("关于消息框");
    QMessageBox::about(
                this,//父窗体
                "关于消息框",//标题
                "这是个关于休斯顿的信息"//显示内容
                );
}

关于QT消息框,调用QMessageBox::aboutQt方法,关于QT消息框会弹出一个有关QT的信息。其他功能暂无。

void MsgBoxDlg::showAboutQtMsgDlg() {
    m_tipLabel->setText("关于QT消息框");
    QMessageBox::aboutQt(
                this,//父窗体
                "关于QT消息框"//标题
                );
}

自定义消息框

自定义消息框设置了一个图标和三个按钮,其中两个按钮采用自定义形式,另一个按钮采用标准形式,当用户点击按钮后,从对话框中获取用户点击的按钮,然后显示出对应的文本。

//自定义消息框
void Dialog::ShowCustomDlg() {
    m_customLabel->setText("自定义消息框");
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle("自定义消息框");
    //返回一个按钮对象
    //自定义按钮
    QPushButton *yes = customMsgBox.addButton(
                "真的吗?",//指定文本
                QMessageBox::ActionRole//指定角色
                );
    //自定义按钮
    QPushButton *no = customMsgBox.addButton(
                "假的",//指定文本
                QMessageBox::ActionRole//指定角色
                );
    //标准按钮
    QPushButton *cancel = customMsgBox.addButton(
                QMessageBox::Cancel);
    //设置图标
    customMsgBox.setIconPixmap(QPixmap("msg.jpg"));
    customMsgBox.exec();
    if(customMsgBox.clickedButton()==yes){
        m_customLabel->setText("点了“真的吗?”");
    }else if(customMsgBox.clickedButton()==no){
        m_customLabel->setText("点了“假的   ”");
    }else if(customMsgBox.clickedButton()==cancel){
        m_customLabel->setText("点了“取消”");
    }

}

 追风赶月莫停留,平芜尽处是春山!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka问题总结

kafka问题总结【1】Kafka 都有哪些特点&#xff1f;【2】为什么要使用 kafka&#xff0c;为什么要使用消息队列&#xff1f;【2】kafka的使用场景【3】Kafka 的设计架构【4】kafka分区的目的【5】Kafka 是如何做到消息的有序性&#xff1f;【6】Kafka 的高可靠性是怎么实现的&a…

【操作系统-总论】发展历程、体系结构、虚拟机

文章目录1 操作系统的发展历程1.1 手工操作阶段1.2 批处理阶段1.2.1 单道批处理系统&#xff08;单道程序系统&#xff09;1.2.2 多道批处理系统&#xff08;多道程序系统&#xff09;1.3 分时操作系统1.4 实时操作系统2 操作系统的体系结构3 虚拟机1 操作系统的发展历程 1.1 …

Nginx教程(3)—负载均衡

文章目录3.1 负载均衡-轮询3.2 负载均衡-加权轮询3.3 upstream指令参数3.4 使用JMeter测试集群3.5 负载均衡之IP_hash3.6 一致性hash算法3.7 Nginx控制浏览器缓存3.8 Nginx反向代理缓存Nginx教程一 Nginx教程二 3.1 负载均衡-轮询 轮询是Nginx默认使用的策略&#xff0c;轮询算…

jmeter做压测性能调优:SSL上下文切换导致SSL频繁握手【杭州多测师_王sir】【杭州多测师】...

一、问题背景在使用 JMeter 压测时&#xff0c;发现同一后端服务&#xff0c;在单机 500 并发下&#xff0c;HTTP 和 HTTPS 协议压测 RT 差距非常大。同时观测后端服务各监控指标水位都很低&#xff0c;因此怀疑性能瓶颈在 JMeter 施压客户端。二、问题分析切入点&#xff1a;垃…

【无标题】大模型时代,视觉推理任务竟然只用语言数据也能学习

原文链接&#xff1a;https://www.techbeat.net/article-info?id4394 作者&#xff1a;seven_ 要让AI模型真正具备智能感知和认知的功能&#xff0c;我们就不得不把视觉分析和自然语言理解二者结合起来进行研究。AI大模型社区的成长为我们带来了很多极具想象力和创造力的新应用…

基于FPGA通过1Gb以太网低延迟传输专业级4K AV信号解决方案

ME10 SoC是全栈AV Over IP片上IP系统(SoC)&#xff0c;通过1Gb网络传输HDMI2.0 4K 4:4:4 的视频、音频和控制数据&#xff0c;ME10 SoC采用一个小的23 x 23毫米BGA封装。ME10主要特色为互通性和优越性能。 IPMX是AV的开放标准和规范的集合&#xff0c;专为专业AV市场开发的IP。…

【并发编程七】C++进程通信——套接字(socket)_80行代码实现一个聊天软件

【并发编程七】进程通信——套接字&#xff08;socket&#xff09;_80行代码实现一个聊天软件一、简介二、相关知识介绍1、winsock1.h、winsock2.h2、如何使用ws2_32.dll3、WSAStartup() 函数4、socket5、bind5、listen6、accept7、connect三、聊天软件的代码如下1、服务端2、客…

QT系列第5节 QT中常用输入控件

QT中经常利用控件来获取用户输入数据&#xff0c;本篇将介绍常用的用户输入控件 目录 (1) QSpinBox (2) QDoubleSpinBox &#xff08;3&#xff09;QSlider &#xff08;4&#xff09; QScrollBar &#xff08;5&#xff09;QProgressBar &#xff08;6&#xff09;QDia…

@MapperScan原理探究

1. 前言 MyBatis在整合Spring的时候&#xff0c;只需要加如下注解&#xff0c;就可以将Mapper实例注册到IOC容器交给Spring管理&#xff0c;它是怎么做到的呢&#xff1f;&#xff1f;&#xff1f; MapperScan("com.xxx.mapper")提出几个问题&#xff1a; Mapper接…

Snipaste的使用

Snipaste截屏软件的使用&#xff1a; 1、开始截屏 第一种方式&#xff1a;快捷键 &#xff08;默认是F1&#xff09;也就是说按一下F1键就会进入截屏状态。 第二种方式&#xff1a;点击软件在任务栏上的图标。 2、选定截屏区域&#xff1a; 进入截屏状态后移动鼠标&#x…

绩效考核管理方案

第一部分 总 则 第一条&#xff1a;目的 1、通过绩效考核&#xff0c;传递组织目标和压力&#xff0c;促使员工提高工作绩效&#xff0c;达到“培养员工、提高员工的工作能力、纠正员工偏差、使之更好地为公司服务&#xff0c;达到公司与个人之间的双赢”的目的。 2、加强公司的…

四、fs文件系统模块

fs模块是Node.js官方提供用来操作文件的模块&#xff0c;属于核心模块&#xff0c;提供了一些列的方法和属性&#xff0c;用来满足用户的操作需求&#xff1b; 引入fs模块 const fs require(fs); fs.readFile() 读取 读取指定的内容&#xff0c;fs.readFile(path[&#xff…

图文排版 之 line-height

图文排版 之 line-height 设置行盒子的高度. line-height 经常被用来设置多行文本的行间距. 对于块级元素, line-height 制定了行盒子的最小高度. 对于非替换的内联元素, line-height 的值用来计算行盒子的高度. 一般来说, 大家都知道一个 div 的高度默认是由其子元素撑起的, …

史上最全 Java 高频面试合集,命中率高达 95%

进大厂是大部分程序员的梦想&#xff0c;而进大厂的门槛也是比较高的&#xff0c;所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全&#xff0c;其中概括的知识点有&#xff1a;Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 Redis、MySQL、Spring、S…

现代控制理论

系统的状态空间表达式的建立 建立系统状态空间表达式的三种方法 &#xff08;1&#xff09;根据系统的方框图列写 &#xff08;2&#xff09;从系统的基本原理推导 &#xff08;3&#xff09;根据传递函数或者高阶微分方程实现 方框图法 有些系统的系统机理还没搞清楚可以使…

nodejs+vue高校教室管理系统

摘 要 1 1 系统概述 4 1.1研究背景 4 1.2研究现状 4 1.3主要内容 5 2 系统开发环境 6 2.3 MySql数据库 6 2.4 B/S结构 7 3 需求分析 8 3.1技术可行性&#xff1a;技术背景 8 3.2经济可行性 8 3.3操作可行性 8 3.4系统设计规则 9 3.5系统流程和逻辑 9 4系统概要设计 13 4.1 概…

Delaunay三角网之分治算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Delaunay三角网现有的构网算法有很多种,有学者曾对其中一些算法进行了调查和评估(如下图所示)。结果表明,在少量点时,Lawson的增量插入算法、Lee和Schachter的分治算法以及Fortune的平面扫描算法在速度上大致相…

Hexo+stun主题+Gitee5分钟快速搭建你的个人Blog

环境配置 首先要下载Node.js&#xff0c;然后安装Git&#xff0c;接着注册码云&#xff0c;最后安装Hexo&#xff0c;Hexo安装命令行(cmd 或 gitbash): npm install hexo-cli -g速度慢可以先改一下安装源: npm config set registry https://registry.npm.taobao.orgHexo搭建 目…

Linux调试器-gdb介绍

文章目录gdb的基础使用gdb是什么gdb的使用gdb的下载**l 显示代码****b 行号 :打断点****info b :查看断点****d 断点序号 :删除断点****r :运行调试****n&#xff08;next&#xff09; &#xff1a;逐过程****s&#xff08;step&#xff09;&#xff1a;逐语句****c&#xff08…

程序员接私活的那些事

每日坚持一点点&#xff0c;就离目标近一点。 文章目录怎么在空闲时间获得格外的收入接私活的有哪些途径接私活的途中需要注意什么格外福利怎么在空闲时间获得格外的收入 今天我们就不聊技术问题&#xff0c;咱们聊聊一个有意思的话题—>怎么在空闲的时间获得格外的收益&…