当前位置: 首页 > news >正文

QT对话框及其属性

Qt中使用QDialog类表示对话框

对话框是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互

QDialog也是继承自QWidget,可以使用QWidget接口

Qt常用的内置对话框有:

对话框

说明

QFiledialog

文件对话框

QColorDialog

颜色对话框

QFontDialog

字体对话框

QInputDialog

输入对话框

QMessageBox

消息框

例:

创建文件时选择继承自QDialog

创建好后直接运行

比QMainWindow和QWidget窗口多一个?,没有最小化,最大化

实际开发中一般不会直接在创建项目时将文件创建为基础自QDialog----一般不将主窗口作为一个对话框,而是在代码中创建额外的类,让额外的类继承自QDialog

在主窗口中通过点击一个按钮来弹出对话框,将主窗口设置为继承自QMainWindow

在ui界面创建一个PushButton

转到PushButton的clicked信号的槽函数进行实现,实现点击按钮后弹出对象框

若将对话框关闭后,再次点击按钮,又会弹出新的对话框,每次弹出的对话框是同一个吗?

不是,每次将对话框关闭后,再次点击按钮都又重新进行创建

因此在程序运行过程中,会创建除无数个对话框,造成内存泄漏,虽然将父元素设置为this,添加到对象树中,会自动销毁,但在窗口退出前不会销毁,也就是说当程序退出之前可能同时存在很对对话框

解决方法:

在用户点击对话框的关闭按钮时,触发delete将对话框销毁

通过QDialog提供的setAttribute(Qt::WA_DeleteOnClose)进行设置其属性,使对话框在关闭时自动delete

自定义对话框内容

继承自QDialog创建类

纯代码方式:

在ui界面创建一个PushButton

转到PushButton的clicked信号的槽函数进行实现自定义对话框,通过创建文件中的创建C++类实现

自定义类名,指定父类

创建好后多出一个头文件和cpp文件

在头文件中声明Dialog.h,对构造函数进行修改,使其能指定父元素

同时在dialog.cpp文件修改构造函数的定义,使其能指定父元素

在mainwindow.cpp文件包含dialog.h,定义pushbutton槽函数,创建自定义的dialog,进行大小,自动delete,弹出的设置

此时就能通过点击按钮弹出对话框

再在dialog.cpp构造函数处实现对话框的自定义,实现添加对话框控件

能够显示添加到对话框的控件,但是位置都在初始位置,通过布局管理器进行管理,在dialog头文件中声明handle,将pushbutton的信号槽进行连接,实现槽函数

在图形化界面创建自定义对话框

创建文件继承自QMainWindow,进入ui界面创建一个QPushButton

再创建一个文件---Qt的ui文件及对应的类

创建好后就有两个ui文件

在dialog.ui进行自定义对话框

转到对话框的按钮的clicked槽函数实现关闭对话框

再转到窗口的ui界面转到打开对话框按钮的clicked槽函数,实现打开对话框,及对话框初始化,需包含dialog.h

model---bool

模态/非模态,为true时是模态,为false时是非模态

模态:弹出对话框时,用户无法操作父窗口,必须完成对话框内部的操作,关闭对话框之后才能操作父窗口

非模态:弹出对话框后,用户可以操作父窗口

上面写的对话框都是非模态的,弹出对话框后,可以通过点击父窗口按钮弹出多个对话框

如:

如何产生模态对话框?

将show()操作替换为exec(),弹出的对话框就为模态对话框

此时就无法产生多个对话框

消息对话框

QMessageBox---QDialog的子类

消息对话框时应用程序中最常用的界面元素,主要用于为用户提示重要信息,强转用户进行选择操作

QMessageBox类中定义了静态成员函数,可以直接调用不同风格的消息对话框

图标格式

说明

NoIcon

无图标

Information

消息图标

Warning

提醒图标

Critical

严重图标

Question

问题图标

内置按钮

NoButton

Ok

Save

SaveAll

Open

Yes

YesToAll

No

NoToAll

Abort

Retry

Ignore

Close

Cancel

Discard

Help

Apply

Reset

RestoreDefaults

消息对话框是模态的

例:

在ui界面创建一个按钮,实现点击按钮弹出消息对话框

转到按钮的clicked的槽函数进行实现

在消息对话框添加自定义按钮

通过QMessageBox的addButton接口进行添加

addButton(const QAbstractButton* button,ButtonRole role);

第一个参数就是PushButton,第二个参数ButtonRole

ButtonRole

采用枚举类型,表示接收/拒绝等含义

通过信号槽实现相关操作

也可以通过用户点击按钮后的返回值来判断用户点击了什么按钮来实现对应操作

如:

直接通过QMessageBox提供的静态函数创建对话框

在ui界面创建一个按钮

转到按钮的clicked信号的槽函数进行实现

同样通过接收返回值来判断是点击了哪个按钮来执行对应操作

此处使用的是warning的静态函数

也可以使用Information,Critical,Question

颜色对话框

QColorDialog颜色对话框的功能是允许用户选择颜色,内置了调色板。

同样继承自QDialog类

常用方法

方法

说明

QColorDialog(QWidget* parent=nullptr)

创建对象的同时设置父对象

QColorDialog(const QColor

&initial,QWidget* parent=nullptr)

创建对象的同时通过QColor对象设置默认颜色和父对象

void setCurrentColor(const

QColor& color)

设置当前颜色对话框

QColor currentColor() const

获取当前颜色对话框

QColor getColor(const QColor

&initial=Qt::white,QWidget*

parent=nullptr,const QString&

title=QString(),QColorDialog::ColorDialogOptions

options=ColorDialogOptions())

  

打开颜色选择对话框,并返回一个QColor对象

getColor是一个静态函数,无需创建对话框对象,可以直接调用

例:

通过按钮弹出对话框

在ui界面创建一个按钮,转到他的clicked槽函数,调用静态函数进行颜色对话框弹出

返回值是QColor类型

可以使用返回的QColor类型,通过QSS的方式设置背景颜色

也可以使用sprintf的方式进行字符串拼接

文件对话框

QFileDialog文件对话框用于应用程序需要打开一个外部文件或将当前内容存储到指定的外部文件

常用方法

方法

说明

QString getOpenfileName()

打开文件,一次只能代开一个文件

QStringList getopenFileNames()

一次打开多个文件

QString getSaveFileName()

保存文件

例:

在ui界面创建两个按钮,一个实现打开文件,一个保存文件,转到槽函数进行实现

点击按钮就能实现弹出相应的文件管理器

点击文件进行打开后,就能获取到文件的完整路径

通过文件路径实现相应操作,需要额外实现

输入文件名,点击保存后,也是获得文件路径

而不是真的保存了,需要额外实现

字体对话框

QFontDialog字体对话框是Qt中提供的预定义的字体对话框类,用于提供选择字体的对话框部件

常用静态函数

使用时第一个参数为bool类型的指针,作为输出型参数,打开对话框后,若点击的是ok则bool类型的指针为true,若点击cancel则bool类型指针为false

例:

在ui界面创建一个pushbutton,实现其clicked槽函数,点击button弹出字体对话框

使用静态函数弹出字体对话框

当设置字体相关属性,返回的font就设置了对应属性,点击ok则返回bool指针为true

此时就可以通过font将设置的字体设置进文本

如设置进pushButton的文本

输入对话框

QInputDialog输入对话框,是Qt中提供的预定义的输入对话框类,用于进行临时数据输入,允许用户输入一个具体的数据---整数,浮点数,字符串等

常用方法

方法

说明

doublle getDouble()

双精度浮点型输入数据对话框

int getInt()

整形输入数据对话框

getItem()

条目输入数据对话框

例:

在ui界面创建一个按钮,定义其clicked信号的槽函数,实现打开整数输入对话框

可以通过键盘输入,也可以通过微调框进行微调

再在ui界面创建一个按钮,实现打开浮点数输入对话框

再在ui界面创建一个按钮,实现打开字符串输入对话框

通过QStringList创建输入条目

返回值为选择的条目被输入的内容

相关文章:

  • 电机试验平台:实现精准测试与优化设计
  • 长尾词驱动SEO优化实战
  • Go context 包的底层实现原理
  • IntelliJ IDEA修改实体类成员变量的名称(引入了该实体类的全部文件也会自动更新变量的名称)
  • 基于 Nginx 的 WebSocket 反向代理实践
  • 探索 AI 在文化遗产保护中的新使命:数字化修复与传承
  • 使用css修饰网页元素
  • 认识哈希以及哈希表的模拟实现
  • Unity中文件上传以及下载,获取下载文件大小的解决方案
  • Ubuntu下安装vsode+qt搭建开发框架(一)
  • 智慧园区IOT项目与AI时代下的机遇 - Java架构师面试实战
  • 设计一个关键字统计程序:利用HashMap存储关键字统计信息,对用户输入的关键字进行个数统计。
  • P3309 [SDOI2014] 向量集 Solution
  • 浏览器界面无显示,提示“代理服务器可能有问题”,这是怎么回事呢?
  • Windows 安装 Neo4j 教程
  • 做大模型应用所需的一点点基础数学理论
  • 内存四区(栈)
  • Java24 抗量子加密:后量子时代的安全基石
  • 【MCP】了解远程MCP调用背后使用的SSE协议
  • 使用matplotlib绘制Raincloud图/云雨图/柱状图/小提琴图
  • 龚正会见委内瑞拉副总统罗德里格斯
  • 物业也能成为居家养老“服务员”,上海多区将开展“物业+养老”试点
  • 黄永年:说狄仁杰的奏毁淫祠
  • 2025年“畅游江淮 合肥等侬”文旅推介会在沪成功举办
  • 俄联邦安全局:俄军高级官员汽车爆炸案嫌疑人已被捕
  • 三大交易所修订股票上市规则:明确关键少数责任,强化中小股东保障