Qt 常用控件 - 1

 

控件概述

编程讲究的是 --- 站在巨人的肩膀上 --- 不是编写一个图形化界面上的内容 --- Qt 已经提供了很多控件了!!!提高图形化界面的开发效率!!!重点变成我们怎么使用这些已有的控件! 

Widget 是 Qt 中的核心概念,英文原义是“小部件”,此处翻译为“控件”。控件是构成图形化界面的基本要素,如按钮、列表视图、树形视图、单行输入框、多行输入框、滚动条、下拉框等都属于控件。

Qt 作为成熟的 GUI 开发框架,内置大量常用控件,且可通过 Qt Designer 看到。Qt 还支持自定义控件,以满足特定需求。

分类子控件类型
Layouts(布局)Vertical Layout(垂直布局), Horizontal Layout(水平布局), Grid Layout(网格布局), Form Layout(表单布局)
Spacers(间隔器)
Buttons(按钮)Push Button(按钮), Tool Button(工具按钮), Radio Button(单选按钮), Check Box(复选框), Command Button(命令按钮), Dialog Button(对话框按钮)
Item Views(项视图)List View(列表视图), Tree View(树形视图), Table View(表格视图), Column View(列视图), List Widget(列表控件), Tree Widget(树形控件), Table Widget(表格控件)
Containers(容器)Group Box(分组框), Scroll Area(滚动区域), Tool Box(工具箱), Tab Widget(标签控件), Stacked Widget(堆叠控件), Frame(框架), Widget(控件), MDI Area(MDI区域), Dock Widget(停靠控件), QaxWidget(Qax控件)
Input Widgets(输入控件)Combo Box(组合框), Font Combo Box(字体组合框), Line Edit(行编辑框), Text Edit(文本编辑框), Plain Text Edit(纯文本编辑框), Spin Box(微调框), Double Spin Box(双微调框), Time Edit(时间编辑框), Date Edit(日期编辑框), Date/Time Edit(日期/时间编辑框), Dial(拨号盘)
Sliders(滑块)Horizontal Bar(水平条), Vertical Bar(垂直条), Horizontal Slider(水平滑块), Vertical Slider(垂直滑块)
Key Sequence Edit(键序列编辑)
Display Widgets(显示控件)Label(标签), Text Browser(文本浏览器), Graphics View(图形视图), Calendar Widget(日历控件), LCD Number(LCD数字显示), Progress Bar(进度条), Horizontal Line(水平线), Vertical Line(垂直线)

这个表格将 Qt 控件按照其功能和用途进行了分类,并列出每个分类下的子控件类型!


Qt 近几年还提供了 Qt Design Studio --- 对标现代化的界面体系 --- 制作出来的页面的美观程度是业界最领先的一档!!!但是目前收费!!!哭了~~~

Qt 中的各种控件都继承自 QWidget 这个类!--- Qt 控件体系中,通用的一部分!

但是:学习 Qt 时,熟悉并掌握内置常用控件是重要任务,这些控件对快速开发符合需求的界面至关重要。

控件体系的发展经历了三个阶段:

  • 第一阶段:完全没有控件,需通过绘图 API 手动绘制按钮、输入框等内容,代码繁琐,如文曲星的 Lava 平台开发。

  • 第二阶段:只包含粗略的控件,如按钮、输入框、单选框、复选框等最常用控件,例如 html 的原生控件。

  • 第三阶段:更完整的控件体系,基本覆盖 GUI 开发中的大部分场景,如早期的 MFC、VB、C++ Builder、Qt、Delphi,后来的 Android SDK、Java FX、前端的各种 UI 库等。前端中的 Element-ui 的控件在丰富程度和颜值上比 Qt 自带的控件更胜一筹。

QWidget 核心属性

在 Qt 中,使用 QWidget 类表示“控件”,具体控件类如按钮、视图、输入框、滚动条等都继承自 QWidget。QWidget 包含了 Qt 整个控件体系中通用的部分。

在 Qt Designer 中,拖动控件后,选中该控件,可在右下方看到 QWidget 中的属性,这些属性既可通过 Qt Designer 直接修改,也可通过代码方式修改,具体含义在 Qt Assistant 中有详细介绍,搜索 QWidget 即可找到文档说明,或在 Qt Creator 代码中选中 QWidget 按 F1 查看。

核心属性概览

属性名描述
enabled设置控件是否可用,true 表示可用,false 表示禁用。
geometry位置和尺寸,包含 x、y、width、height 四个部分,坐标以父元素为参考。
windowTitle设置 widget 标题。
windowIcon设置 widget 图标。
windowOpacity设置 widget 透明度。
cursor鼠标悬停时显示的图标形状,如普通箭头、沙漏、十字等,在 Qt Designer 界面中有可选项。
font字体相关属性,涉及字体家族、字体大小、粗体、斜体、下划线等样式。
toolTip鼠标悬停在 widget 上时在状态栏中显示的提示信息。
toolTipDurationtoolTip 显示的持续时间。
statusTipWidget 状态发生改变时显示的提示信息(如按钮被按下等)。
whatsThis鼠标悬停并按下 alt+F1 时显示的帮助信息,显示在一个弹出的窗口中。
styleSheet允许使用 CSS 来设置 widget 中的样式,Qt 支持的样式丰富,对前端开发人员友好。
focusPolicy该 widget 如何获取焦点,有以下几种方式:



 
contextMenuPolicy上下文菜单的显示策略,有以下几种:



 
locale设置语言和国家地区。
acceptDrops该部件是否接受拖放操作。如果设置为 true,该部件可以接收来自其他部件的拖放操作,并会接收到相应的拖放事件;如果设置为 false,则不会接收任何拖放操作。
minimumSize控件的最小尺寸,包含最小宽度和最小高度。
maximumSize控件的最大尺寸,包含最大宽度和最大高度。
sizePolicy尺寸策略,设置控件在布局管理器中的缩放方式。
windowModality指定窗口是否具有“模态”行为。
sizeIncrement拖动窗口大小时的增量单位。
baseSize窗口的基础大小,用来搭配 sizeIncrement 调整组件尺寸时计算组件应该调整到的合适值。
palette调色板,可以设置 widget 的颜色风格。
mouseTracking是否要跟踪鼠标移动事件。如果设为 true,表示需要跟踪,鼠标划过时该 widget 能持续收到鼠标移动事件;如果设为 false,表示不需要跟踪,鼠标划过时 widget 不会收到鼠标移动事件,只能收到鼠标按下或者释放的事件。
tabletTracking是否跟踪触摸屏的移动事件,类似于 mouseTracking,是 Qt 5.9 中引入的新属性。
layoutDirection布局方向,有以下几种:

 
autoFillBackground是否自动填充背景颜色。
windowFilePath能够把 widget 和一个本地文件路径关联起来,但作用不大。
accessibleName设置 widget 的可访问名称,这个名称可以被辅助技术(像屏幕阅读器)获取到,用于实现无障碍程序的场景中,比如给盲人写的程序。其实盲人也可以使用电脑和手机,甚至能成为程序员,可参考链接我采访了几位盲人程序员,看看他们是怎么写代码的【差评君】_哔哩哔哩_bilibili。
accessibleDescription设置 widget 的详细描述,作用同 accessibleName。
inputMethodHints针对输入框有效,用来提示用户当前能输入的合法数据的格式,比如只能输入数字、只能输入日期等。

接下来会介绍一些比较重要比较常用的属性,并附有代码示例!

enabled

方法 --- API描述 --- 功能
isEnabled()获取到控件的可用状态。
setEnabled(bool)设置控件是否可用,true 表示可用,false 表示禁用。

所谓“禁用”指的是该控件不能接收任何用户的输入事件,并且外观上往往是灰色的。如果一个 widget 被禁用,则该 widget 的子元素也被禁用。

代码示例:使用代码创建一个禁用状态的按钮 --- widget.cpp

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* btn = new QPushButton(this);btn->setText("这是个被禁用的按钮");btn->setEnabled(false);
}

运行程序,可以看到按钮处于灰色状态,无法被点击。

代码示例:通过按钮2 切换按钮1 的禁用状态.

使用 Qt Designer 拖两个按钮到 Widget 中,两个按钮的 objectName 分别为 pushButton 和 pushButton_2

📚 QObject 的 objectName 属性介绍: QObject 是 QWidget 的父类.。里面最主要的属性就是 objectName 。

在一个 Qt 程序中,objectName 相当于对象的身份标识,彼此之间不能重复.。

在使用 Qt Designer 时, 尤其是界面上存在多个 widget 的时候, 可以通过 objectName 获取到指定的 widget 对象。Qt Designer 生成的 ui 文件, 本身是 xml 格式的。qmake 会把这个 xml 文件转换成 C++ 的 .h 文件(这个文件生成在 build 目录中),构成一个 ui_widget 类。

每个 widget 的 objectName 最终就会成为 ui_widget 类的属性名字。最终这个类的实例,就是 Ui::Widget *ui ,因此就可以通过形如 ui->pushButton 或者 ui->pushButton_2 这样的代码获取到界面上的 widget 对象了。

class Ui_Widget
{
public:QPushButton *pushButton;QPushButton *pushButton_2;
}

生成两个按钮的 slot 函数;

  • 使用 isEnabled 获取当前按钮的可用状态;
  • 使用 setEnabled 修改按钮的可用状态;

此处是直接针对原来的可用状态进行取反后设置。

void Widget::on_pushButton_clicked()
{qDebug() << "按下按钮";
}
void Widget::on_pushButton_2_clicked()
{bool flag = this->ui->pushButton->isEnabled();this->ui->pushButton->setEnabled(!flag);
}

运行程序,可以看到,初始情况下,上面的按钮是可用状态,点击下方按钮,即可使上方按钮被禁用; 

再次点击下方按钮,上方按钮就会解除禁用。 (禁用状态的按钮为 灰色, 且不可点击) 

🥛 在 Qt Designer 中创建按钮的时候,可以设置按钮的初始状态是 "可用" 还是 "禁用" 。如果把 enabled 这一列的对钩去掉,则按钮的初始状态就是 "禁用" 状态。




下一篇继续!!!请持续关注😋😋😋😋😋

下一篇继续!!!请持续关注😋😋😋😋😋

下一篇继续!!!请持续关注😋😋😋😋😋

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

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

相关文章

springdoc-openapi-ui的使用教程

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version> </dependency>springdoc-openapi-ui 是一个用于生成 OpenAPI 文档的库&#xff0c;它与 Swagger 的关…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-3,(运放/三极管)

目录 1、题目 2、解答 【硬件-笔试面试题】硬件/电子工程师&#xff0c;笔试面试题-3&#xff0c;&#xff08;运放/三极管&#xff09; 这是一道大疆的笔试题 1、题目 2、解答

SQL Server 数据类型的含义、特点及常见使用场景的详细说明

数值类型 bigint 含义:用于存储大范围的整数,是 8 字节(64 位)有符号整数类型。 范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 。 场景:适合存储像订单编号(可能很大)、系统中需要大范围计数的标识等,比如大型系统中大量数据的主键自增列(数据量极…

WPF的一些基础知识学习记录

路由事件 路由事件(Routed Event)是WPF事件系统的核心&#xff0c;它允许事件在元素树中传播&#xff0c;而不仅仅局限于引发事件的对象。包含以下三类&#xff1a;类型方向触发顺序典型用途示例事件​​直接事件(Direct Event)​​不路由只在源元素触发类似传统.NET事件MouseE…

【补题】Codeforces Round 1000 (Div. 2) C. Remove Exactly Two

题意&#xff1a;给一个树&#xff0c;可以从里面删去两个点&#xff0c;使连通块数量最大 思路&#xff1a;题解&#xff1a;CF2063C Remove Exactly Two - 洛谷专栏 这道题很容易想到&#xff0c;直接删去度最多的两个点就行了&#xff0c;但是这并不对&#xff0c;因为相邻…

基于php的校园招聘平台

学生&#xff1a;注册&#xff0c;登录&#xff0c;个人中心&#xff0c;学生应聘管理&#xff0c;面试邀请管理企业&#xff1a;登录&#xff0c;个人中心&#xff0c;招聘信息管理&#xff0c;学生应聘管理&#xff0c;面试邀请管理管理员&#xff1a;登录&#xff0c;个人中…

在 Ubuntu 22.04 上运行 cAdvisor 时遇到 mountpoint for cpu not found 错误

通常是由于 cgroup v2 导致的兼容性问题。Ubuntu 22.04 默认使用 cgroup v2&#xff0c;而旧版本的 cAdvisor 可能不完全支持它。以下是解决方案&#xff1a;方法 1&#xff1a;启用 cgroup v1&#xff08;推荐&#xff09;临时切换回 cgroup v1&#xff08;cAdvisor 兼容性更好…

如何让RAGFLow每次知识检索都是返回知识库中的所有文档?

在使用raglfow过程中,有时候输入的文本检索为空,要么就是只返回几条.如果想要看到所有知识库里文本返回,就得需要去到源码里修改这个参数minimum_should_match(路径:rag/utils/es_conn.py),将其设置为0%,即可返回所有文本!!

「iOS」——KVO

源码学习iOS底层学习&#xff1a;KVO 底层原理KVO注册 KVO 监听 实现 KVO 监听 移除 KVO 监听 处理变更通知 手动KVO(禁用KVO)关闭自动通知手动实现 setter 方法KVO 和线程如果 KVO 是多线程的**单线程的保证**如果没有 prior 选项**prior 选项的作用**KVO 实现原理派生类重写的…

Unreal5从入门到精通之使用 Python 编写虚幻编辑器脚本

文章目录 前言 如何运行Python 1.控制台 2.蓝图调用python python 入门 变量 数据类型 运算符 条件判断 循环 函数 模块引用 类型转换 类 类方法 继承 构造函数 unreal API 创建材质 创建材质实例 获取Content下选中资源 获取关卡中选中Actors 放置Cube 编辑器进度条 展示对话框…

Django3 - Web前端开发基础 HTML、CSS和JavaScript

网站开发可以分为前端开发和后端开发&#xff0c;前端开发是指网页设计&#xff0c;我们在浏览器看到网站的图片、文字、音乐视频等内容排版都是由前端开发人员实现的&#xff1b;后端开发是为前端开发提供实际的数据内容和业务逻辑&#xff0c;比如提供文字内容、图片和音乐视…

Nginx和Apache的区别

一。Nginx和Apache的优缺点和对比Nginx 优点Apache 优点性能与并发采用事件驱动模型&#xff0c;支持 10 万 高并发连接&#xff0c;资源&#xff08;CPU / 内存&#xff09;占用极低生态成熟&#xff0c;内置模块可直接处理动态内容&#xff0c;无需依赖第三方程序配置与部署…

前端实现可编辑脑图的方案

前端实现可编辑脑图的方案 实现可编辑脑图(Mind Map)在前端有多种方案&#xff0c;以下是一些主流的技术方案&#xff1a; 1. 基于现有开源库的方案 JavaScript 库 MindElixir: 轻量级开源脑图库&#xff0c;支持节点增删改、拖拽、导入导出等 GitHub: https://github.com/sssh…

7-大语言模型—指令理解:指令微调训练+模型微调

目录 1、指令微调的训练过程 2、指令微调数据 2.1、“指令输入” 2.2、“答案输出” 3、指令微调数据的构建方法 3.1、手动构建&#xff1a;纯人工 “出题 写答案” 3.1.1、构建流程 3.1.1.1、定义任务类型 3.1.1.2、设计指令模板 3.1.1.3、人工标注响应 3.1.2、工…

服务器版本信息泄露-iis返回包暴露服务器版本信息

漏洞信息描述&#xff1a;服务器版本信息泄露 测试过程&#xff1a;访问http://192.168.23.63&#xff0c;看返回包可以得知服务器版本信息 显示暴露返回server版本信息 修复建议&#xff1a;限制返回包带有服务器版本信息 如何隐藏IIS Web服务响应头中的IIS Server版本信息…

rust嵌入式开发零基础入门教程(二)

本教程的第二部分&#xff0c;我们将深入理解 Rust 语言的核心概念——所有权&#xff08;Ownership&#xff09;、借用&#xff08;Borrowing&#xff09;和生命周期&#xff08;Lifetimes&#xff09;。这些是 Rust 内存安全的基础&#xff0c;也是初学者理解 Rust 最关键的部…

【黑产大数据】2025年上半年互联网黑灰产趋势年度总结

2025年上半年&#xff0c;互联网黑灰产攻击持续演化&#xff0c;呈现出更隐蔽、更智能、更产业化的趋势。黑灰产从业人员数量继续增长&#xff0c;攻击资源、技术与作案场景全面升级。整体来看&#xff0c;2025年上半年黑灰产行业发生的几大事件&#xff0c;也时刻印证了黑灰产…

低代码/无代码平台如何重塑开发生态

低代码/无代码平台通过降低技术门槛、提升开发效率、推动业务和IT深度融合重塑开发生态。 具体而言&#xff0c;低代码/无代码平台极大降低了应用开发的技术门槛&#xff0c;使得非专业人员也能轻松构建业务应用。此外&#xff0c;它们通过可视化的开发模式&#xff0c;大幅提升…

ICA学习(2)

1.公式推导1.1两个问题ICA算法会带来2个不确定性&#xff1a;幅值不确定性和顺序不确定性。1.2 推导观测数据 x 是盲源 s 的线性混合&#xff1a;x As (1)此时&#xff0c;W矩阵是未知的&#xff0c;ICA算法的目的便是找到一个最优的矩阵W&#xff0c;实现对矩阵…

【愚公系列】《MIoT.VC》002-构建基本仿真工作站(布局一个基本工作站)

💎【行业认证权威头衔】 ✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋:横跨鸿蒙、云计算、AI等前沿领域…