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

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.dtcms.com/a/293584.html

相关文章:

  • 分布式风电分散式风电
  • Qt内存管理的核心点
  • 技术速递|使用 Semantic Kernel 与 A2A 协议构建多智能体解决方案
  • MCP:UVX的安装
  • 计算机组成原理(一)
  • 架构师--缓存场景
  • 利用DeepSeek编写一个使用lzav算法的文件压缩工具
  • 什么是LLMs.txt?如何在线生成?robots.txt一键转LLMs.txt
  • 第九讲:C++中的list与forward_list
  • OpenCV 零基础到项目实战 | DAY 2:图像预处理全解析
  • 基于STM32驱动ADS1118实现电压采样并输出到串口
  • PetaLinux 使用技巧与缓存配置
  • 从零搭建 OpenCV 项目(新手向)-- 第二天 OpenCV图像预处理(一)
  • 第四章 Freertos物联网实战DHT11温湿度模块
  • 嵌入式学习-(李宏毅)机器学习(1)-day28
  • 本地电脑映射端口到外网访问的开启方法和注意事项,内网服务提供跨网使用简单操作实现
  • 神经网络和机器学习的一些基本概念
  • 某种物联网SIM卡流量查询方法
  • BQ4050RSMR DIOTEC高精度锂电池保护与电量监测芯片 集成保护+计量+通信
  • 2025年Zigbee技术白皮书:全球物联网无线通信的关键创新
  • 【Linux | 网络】应用层(HTTPS)
  • 如何在 Ubuntu 20.04 Linux 上安装 TeamSpeak 客户端
  • SparkSQL 聚合函数 MAX 对 NULL 值的处理
  • AWS Lambda IoT数据处理异常深度分析:从告警到根因的完整排查之路
  • Notepad++工具操作技巧
  • BitDistiller:通过自蒸馏释放 Sub-4-Bit 大语言模型的潜力
  • React Native + Expo 入坑指南:从核心概念到实战演练
  • Android 测试全指南:单元测试与UI测试框架详解
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——3. QML入门:像搭积木一样构建UI
  • 论文笔记:Tuning Language Models by Proxy