【Qt窗口】—— 对话框

目录

(一) 对话框介绍

(二)对话框的分类

2.1 模态对话框 

2.2 非模态对话框

2.3 混合属性对话框

(三)内置对话框

消息对话框 QMessageBox

颜色对话框 QColorDialog

 字体对话框 QFontDialog

输入对话框 QInputDialog

文件对话框 QFiledialog

总结


(一) 对话框介绍

我们有的时候打开某些网站,不经意间可能就会弹出各种奇奇怪怪的窗口,这个就可以叫做“对话框”,对话框往往在用户与用户之间进行“短平快” 的操作。

对话框是GUI程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框 中。对话框通常是⼀个顶层窗口,出现在程序最上层,⽤于实现短期任务或者简洁的用户交互。

Qt常用的内置对话框有:

  • QMessageBox(消息框)
  • QColorDialog(颜色对话框)
  • QFontDialog (字体对话框)
  • QInputDialog(输入对话框)
  • QFiledialog(文件对话框)

(二)对话框的分类

对话框主要可以分为模态对话框⾮模态对话框 。

2.1 模态对话框 

模态对话框指的是:显示后无法与父窗口进行交互,是⼀种阻塞式的对话框。使用QDialog::exec()函数调用。

模态对话框适用于必须依赖用户选择的场合,⽐如消息显示,文件选择,打印设置等。

 示例:

  • 1、新建Qt项⽬,在ui⽂件中的菜单栏中设置两个菜单:"文件"和"编辑",在菜单"文件"下新建菜单项:"创建"并将菜单项"新建"置于工具栏中;如下图示:

  • 2、在mainwindow.cpp⽂件中实现:当点击"新建"时,弹出⼀个模态对话框(在菜单项中,点击菜单项时就会触发triggered()信号); 


2.2 非模态对话框

非模态对话框显示后独立存在,可以同时与父窗口进行交互,是⼀种非阻塞式对话框,使用QDialog::show()函数调用。

  • ⾮模态对话框⼀般在堆上创建,这是因为如果创建在栈上时,弹出的⾮模态对话框就会⼀闪⽽过。

⾮模态对话框适用于特殊功能设置的场合,⽐如查找操作,属性设置等。 

示例:

    QDialog *dialog = new QDialog();//设置 大小dialog->resize(700,500);//设置标题dialog->setWindowTitle("this is a dialog");//关闭窗口的时候触发delete操作dialog->setAttribute(Qt::WA_DeleteOnClose);dialog->show();

【说明】

  • QDialog其实也是QWidget的子类,QWidget 的各种属性方法,在QDialog也同样适用。
  • 同时还需要设置Qt:WA_DeleteOnClose属性,⽬的是:当创建多个⾮模态对话框时(如打开了多个非模态对话框),为了避免内存泄漏要设置此属性。 

2.3 混合属性对话框

混合属性对话框同时具有模态对话框和非模态对话框的属性,对话框的生成和销毁具有非模态对话框属性,功能上具有模态对话框的属性。


使用QDialog::setModal()函数可以创建混合特性的对话框。通常,创建对话框时需要指定对话框的父组件。

示例:


 

(三)内置对话框

Qt提供了多种可复复用的对话框类型,即Qt标准对话框。Qt标准对话框全部继承于QDialog类。常用标准对话框如下:
 

消息对话框 QMessageBox

消息对话框是引用程序最常用的界面元素,消息对话框主要用于为用户提示重要消息,强制用户进行选择操作。其次QMessageBox是预定义的对话框,不需要手动创建布局和控件,非常适合用于显示简单的消息和接收用户的简单输入。

QMessageBox 提供了多种静态方法来快速显示不同类型的消息框:

  • information:显示一个信息消息框
QMessageBox::information(QWidget *parent, const QString &title, const QString &text
)

 接下来,我们简单通过代码实现一下:

    QMessageBox* MessageBox = new QMessageBox(this);MessageBox->setWindowTitle("对话框窗口标题!");MessageBox->setText("这是对话框文本");MessageBox->setIcon(QMessageBox::Information); //显示信息消息框MessageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save |         QMessageBox::Cancel);//非模态对话框MessageBox->show();//模态对话框//弹出对话框,当对话框处于弹出状态时,代码就会在exec这里阻塞,一直到对话框关闭MessageBox->exec();//delete MessageBoxMessageBox->setAttribute(Qt::WA_DeleteOnClose);

输出展示:

 

虽然QMessageBox提供了许多预定义的选项,但你也可以自定义消息框的外观和行为。就接着上述代码,我们进行判断: 

    int res = MessageBox->exec();if(res == QMessageBox::Ok){qDebug() << "ok";}else if(res == QMessageBox::Save){qDebug() << "Save";}else if(res == QMessageBox::Cancel){qDebug() << "Cancel";}

当然,除了上述手动代码实现之外,我们还可以通过Qt中给出的静态方法进行实现。具体如下:

    int resutlt = QMessageBox::information(this,"对话框标题","对话框文本",QMessageBox::Ok |     QMessageBox::Cancel);if(resutlt == QMessageBox::Ok){qDebug() <<"ok";}else if(resutlt == QMessageBox::Cancel){qDebug() <<"cancle";}

其中可以设置的按钮的类型如下:


以下代码跟上述类似,就不在展开。

  • warning :显示一个警告消息框
QMessageBox::warning(QWidget *parent, const QString &title, const QString &text
)
  • critical :显示一个严重错误消息框
QMessageBox::critical(QWidget *parent, const QString &title, const QString &text
)
  • question :显示一个问题消息框,允许用户做出选择
QMessageBox::question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = NoButton, QMessageBox::StandardButton defaultButton = NoButton
)

颜色对话框 QColorDialog

 在Qt中,颜色对话框是通过QColorDialog 类实现的,它允许用户选择颜色。QColorDialog提供了一个标准的界面,让用户可以浏览和选择颜色。它是一个模态对话框,意味着它会阻塞其父窗口直到用户做出选择或取消对话框。

颜⾊对话框如下图示: 

 根据我们上述的理解,我们可能会在此处写出下列代码:

    QColorDialog* color = new QColorDialog();color->exec();delete  color;

但是在QColorDialog中提供了自己的方法。具体如下:

//打开颜⾊选择对话框,并返回⼀个QColor对象
QColorgetColor(const QColor &initial = Qt::white,QWidget *parent = nullptr,const QString &title = QString(),QColorDialog::ColorDialogOptions options = ColorDialogOptions()
)参数说明:
initial:设置默认颜⾊
parent:设置⽗对象
title:设置对话框标题
options:设置选项

示例如下:

     //函数的返回值就是用户选择的颜色QColor color = QColorDialog::getColor(QColor(255,0,0),this,"选择颜色");qDebug() << color;

输出展示: 

 其次,我们还可以基于用户选择设置窗口颜色:

    //可以基于用户选择的颜色,修改窗口色//方法一QString style = "background-color: rgb(" + QString::number(color.red()) + ", " +   QString::number(color.green()) + ", "+  QString::number(color.blue()) + ");";this->setStyleSheet(style);//方法二char buffer[1024] = {0};         sprintf(buffer,"backgroundcolor:rgb(%d,%d,%d);",color.red(),color.green(),color.blue());this->setStyleSheet(buffer);

 

 字体对话框 QFontDialog

在Qt中,QFontDialog类用于显示一个字体选择对话框,允许用户选择字体的样式、大小、粗细等属性。其次这个对话框是模态的,提供了一个简单而强大的方式来让用户选择字体,适用于需要字体选择功能的应用程序

示例:

    bool flag = false;QFont font = QFontDialog::getFont(&flag);//qDebug() << font;qDebug() << "ok = " << flag;qDebug() <<"字体" <<font.family();qDebug() << "获取字号" <<font.pointSize();qDebug() << "是否倾斜" <<font.italic();qDebug() << "是否加粗" << font.bold();//把对话框文件字体进行设置ui->pushButton->setFont(font);

运行效果如下:

 


输入对话框 QInputDialog

在Qt中,QInputDialog 是一个用于提供简单输入的对话框类,它允许用户输入文本、数字或选择列表中的一个选项。这个对话框是模态的,提供了快速而简单的方式来获取用户输入,适用于不需要复杂输入界面的场景

常用方法介绍:

  • 1、双精度浮点型输入数据对话框
double getDouble(QWidget *parent,const QString &title,const QString &label,double value=0,double min=-2147483647,double max=2147483647,int decimals=1,bool *ok=nullptr,Qt::WindowFlags flags=Qt::WindowFlags()
);
  • 2、整型输入数据对话框
int getInt(QWidget *parent,const QString &title,const QString &label,int value=0,int min=-2147483647,int max=2147483647,int step=1,bool* ok=nullptr,Qt::WindowFlagsflags=Qt::WindowFlags()
);

  • 3、选择条目型输入数据框
QString getItem(QWidget *parent,const QString &title,const QString &label,const QStringList &items,int current=0,bool editable=true,bool *ok=nullptr,Qt::WindowFlags flags=Qt::WindowFlags(),Qt::InputMethodHints inputMethodHints=Qt::ImhNone
);参数说明:
parent:⽗亲
title:对话框标题
label:对话框标签
items:可供选择的条⽬

示例

void MainWindow::on_pushButton_clicked()
{//打印整数int res = QInputDialog::getInt(this,"整数输入对话框","请输入一个整数:");qDebug() << res;
}void MainWindow::on_pushButton_2_clicked()
{//打印浮点数float res = QInputDialog::getDouble(this,"整数输入对话框","请输入一个浮点数:");qDebug() << res;
}void MainWindow::on_pushButton_3_clicked()
{//打印条目QStringList item;item.push_back("111");item.push_back("222");item.push_back("333");item.push_back("444");QString body = QInputDialog::getItem(this,"条目输入对话框","请输入条目",item);qDebug() << body;
}

运行效果如下:


 

文件对话框 QFiledialog

在Qt中,QFiledialog是一个用于打开和保存文件的对话框类。它提供了一个标准的界面,让用户可以浏览文件系统、选择文件或目录,并执行打开或保存操作,其次QFiledialog也模态的。

常用方法介绍:

  • 1、打开文件(⼀次只能打开⼀个文件)
QString getOpenFileName(QWidget* parent = nullptr,const QString &caption = QString(),constQString &dir = QString(),constQString &filter= QString(),QString*selectedFilter = nullptr,QFileDialog::Optionsoptions = Options()
)

示例1:打开文件

 QString file = QFileDialog::getOpenFileName(this,  //父亲"文件", //文件对话框标题"D:\\c++ Learning\\qt\\code\\Qt window\\QFileDialog\\untitled",//打开路径"*.cpp" //打开文件格式);qDebug() << file;

 运行效果如下:

  •  2、打开多个文件(⼀次可以打开多个文件)
QStringList getOpenFileNames(QWidget *parent=nullptr,const QString &caption=QString(),const QString &dir=QString(),const QString &filter=QString(),QString *selectedFilter=nullptr,QFileDialog::Optionsoptions=Options()
)
  • 3、保存文件
QString getSaveFileName(QWidget*parent=nullptr,constQString &caption=QString(),const QString &dir=QString(),const QString &filter=QString(),QString *selectedFilter=nullptr,QFileDialog::Options options=Options()
)参数说明:
参数1:parent ⽗亲
参数2:caption 对话框标题
参数3:dir 默认打开的路径
参数4:filter ⽂件过滤器

总结

在Qt中,对话框是用于与用户进行交互的特殊窗口,通常用于输入数据、显示信息或进行设置。对话框可以是模态的也可以是非模态的。

主要特点:

1.模态对话框(Modal Dialogs)

  • 阻塞父窗口,直到对话框关闭。
  • 通常用于需要用户立即响应的情况,如确认操作、输入数据等。
  • 在Qt中,可以使用Dialogs类创建模态对话框。

2.非模态对话框(Non-modal Dialogs)

  • 不阻塞父窗口,用户可以同时与父窗口和其他非模态对话框交互。
  • 适用于不需要立即响应的辅助窗口,如状态显示、日志查看等。

创建对话框:

  • 继承QDialog:创建自定义对话框时,通常需要继承QDialog类,并在其中定义所需的界面元素和逻辑。
  • 使用预定义对话框:Qt提供了一系列预定义的对话框类,如QFileDialog(文件选择)、QColorDialog(颜色选择)、QMessageBox(消息提示)等,可以直接使用这些类来实现常见的对话框功能。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scrapy入门学习

文章目录 Scrapy一. Scrapy简介二. Scrapy的安装1. 进入项目所在目录2. 安装软件包Scrapy3. 验证是否安装成功 三. Scrapy的基础使用1. 创建项目2. 在tutorial/spiders目录下创建保存爬虫代码的项目文件3.运行爬虫4.利用css选择器Scrapy Shell提取数据例如: Scrapy 一. Scrapy…

glsl着色器学习(十)缩放

对二维图形进行缩放&#xff0c;需要用到顶点着色器&#xff0c;顶点着色器经过矩阵变换&#xff0c;会将模型空间最终转换成裁剪空间。下面就来操作矩阵 这里需要用到一个库glMatrix。 首先修改顶点着色器 <script id"vertex-shader-2d" type"x-shader/x-…

Win32创建虚拟打印机

最近有个需求需要对报告打印进行统一的管理&#xff0c;最终实现方案如下&#xff1a; 1、安装Microsoft Print To PDF虚拟打印机&#xff0c;该打印机可以将所有打印数据转换为PDF 2、通过Microsoft Print To PDF虚拟机参数复制一台新的虚拟打印机 3、创建打印输出端口&…

服务器数据恢复—LeftHand存储中raid5阵列多块磁盘离线的数据恢复案例

LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列&#xff0c;同时还支持卷快照&#xff0c;卷动态扩容等。下面简单聊一下LeftHand存储的结构和一个LeftHand p4500存储中磁盘阵列数据恢复案例。 服务端&#xff1a; 客户端&#xff1a; LeftHand存储结构&#xff1a; Lefthand存…

C语言指针详解-包过系列(一)目录版

C语言指针详解-包过系列&#xff08;一&#xff09;目录版 1.内存和地址1.1内存1.2 深入理解编址 2.指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引用操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 指针变量各部分理解2.2.3 解引用操作…

Oracle 常用函数大全

文章目录 一、空校验1. NVL 空校验2. COALESCE 空校验 二、排序1. ORDER BY 排序2. ORDER BY DECODE 指定值排序 三、排名1. RANK 排名2. DENSE RANK 密集排名 四、限制条数1. ROWNUM 限制2. FETCH 限制 五、字符串处理1. TO_CHAR 字符串转换2. || 字符串拼接3. CONCAT 字符串拼…

【Qt】颜色对话框QColorDialog

颜色对话框QColorDialog 颜⾊对话框的功能是允许⽤⼾选择颜⾊。继承⾃ QDialog 类。 Qt QColorDialog 的功能就是内置了调色板&#xff0c;效果和上图画图板的调色板类似。 常用方法介绍&#xff1a; QColorDialog (QWidget *parent nullptr) //创建对象的同时设置⽗对象Q…

获取navicat已保存数据库连接的密码

打开connections.ncx&#xff0c;可以看到Passwordxxx,这是加密后的密码 解密 在线的运行工具https://tool.lu/coderunner 运行如下代码&#xff0c;代码中的密码改成你的密码&#xff0c;在倒数第二行位置 <?phpnamespace FatSmallTools;class NavicatPassword{protected…

draw.io图片保存路径如何设置

当在draw.io中画图时&#xff0c;对于图片的保存经常选择了但是后面打开了又不知道图片的位置在哪&#xff0c;如下图所示&#xff0c;选择的途径很多。 为了之后存储文件较为简单&#xff0c;今天小编从源头设置图片的存储位置&#xff0c;使用浏览器设置的保存文件的路径。 …

2024年9月4日嵌入式学习

内存泄漏&#xff1a; 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中已动态分配的内存由于某种原因程序未释放或无法释放&#xff0c;导致系统内存的浪费&#xff0c;严重时会导致程序运行缓慢甚至崩溃。这种情况在长时间运行的程序或大型系统中尤为常见&#xff0c;…

A02、Java编程性能调优(02)

1、Stream如何提高遍历集合效率 1.1、什么是Stream 现在很多大数据量系统中都存在分表分库的情况。例如&#xff0c;电商系统中的订单表&#xff0c;常常使用用户 ID 的 Hash 值来实现分表分库&#xff0c;这样是为了减少单个表的数据量&#xff0c;优化用户查询订单的速度。 …

2024.9.3 作业

自己实现栈和队列 代码&#xff1a; /*******************************************/ 文件名&#xff1a;sq.h /*******************************************/ #ifndef SQ_H #define SQ_H #include <iostream> #include<cstring>using namespace std; class …

Matlab R2022b使用Camera Calibrator工具箱张正友标定法进行相机标定附带标定前后对比代码

打开Camera Calibrator 在这添加你拍摄的图片 根据你每个方块的实际边长填写&#xff0c;我是15mm。 通俗一点&#xff0c;要k3就选3 Coefficients&#xff0c;否则为0&#xff1b;要p1、p2就选Tangential Distortion。然后进行计算。 可以点击右侧误差高的选中图像进行移…

【C/C++】C语言实现蛇形矩阵

目录 题目描述输入描述:输出描述:示例思路代码 题目描述 给你一个整数n&#xff0c;输出n∗n的蛇形矩阵。 输入描述: 输入一行&#xff0c;包含一个整数n 输出描述: 输出n行&#xff0c;每行包含n个正整数&#xff0c;通过空格分隔。 1<n<1000 示例 输入 4输出 …

iOS18 beta版本怎么回退至iOS17正式版本?

截止目前&#xff0c;苹果最近的iOS18的beta测试版本已经发了8版了&#xff0c;有许多朋友们都已升级提前尝鲜了&#xff0c;升级体验后许多果粉朋友们觉得有许多功能还是不够稳定&#xff0c;有些许bug&#xff0c;就想要降级&#xff0c;回退到iOS17的正式版&#xff0c;但又…

2024数博会技术成果回顾 | KPaaS助力企业数智化转型

2024年8月28日至30日&#xff0c;中国国际大数据产业博览会&#xff08;简称“数博会”&#xff09;在贵州省贵阳市隆重举行。本届数博会以“数智共生&#xff1a;开创数字经济高质量发展新未来”为主题&#xff0c;吸引了来自全球各地的400多家企业和2.1万余名嘉宾参与&#x…

AI自动生成PPT哪个软件好?如何自动生成专业级PPT?

新学期伊始&#xff0c;准备开学演讲稿的你是否还在为制作PPT而烦恼&#xff1f;别担心&#xff0c;现在有了AI的帮助&#xff0c;生成专业且吸引人的PPT变得轻而易举。 本文将为你揭秘4种高效的AI自动生成PPT的方法&#xff0c;让你在新学期的演讲中脱颖而出。无论是简洁明了…

Python | Leetcode Python题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; class Solution:def isRectangleCover(self, rectangles: List[List[int]]) -> bool:area, minX, minY, maxX, maxY 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]cnt defaultdict(int)for rect in rec…

glsl着色器学习 (十二)平移

平移和旋转、缩放是一样的&#xff0c;替换成平移矩阵即可&#xff1b; // 创建一个单位矩阵 const translateYMatrix mat4.create();// 沿着Y轴向下平移1个单位 mat4.fromTranslation(translateYMatrix, [0, -1, 0]);// 设置矩阵 gl.uniformMatrix4fv(matrixUniformLocation…

Linux进程状态 僵尸进程 孤儿进程

进程状态 R (running) Linux 的运行状态(循环空语句) S (sleeping) 阻塞状态 称为浅度睡眠(可以被唤醒)死循环打印语句时等待输入时使用 sleep 函数时 D (disk sleep) 也是一种阻塞状态&#xff0c;称为深度睡眠进程在等待磁盘写入完毕期间&#xff0c;这个进程不能被任何人杀…