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

Qt——QWidget

一.控件概述

Widget 是 Qt 中的核心概念. 英文原义是 "小部件",我们也把它翻译为 "控件" 。

控件是构成⼀个图形化界面的基本要素。

像上述示例中的, 按钮, 列表视图, 树形视图, 单行输入框, 多行输入框, 滚动条, 下拉框等, 都可以称为 "控件"。

Qt中已经提供了很多内置的控件,并且还提供了自定义控件的能力。

在Qt界面编辑中,左侧就显示Qt内置的各种各样的控件。


二.Qwidget属性

Qt中的各种控件都继承自QWidget类。QWidget中包含各种的属性,在界面编辑右侧可以看到:

属性非常多,下面我们来分享一些常用的重要的属性。


1.enable

enable:描述一个控件是否处于“可用”状态。反之为“禁用”

所谓 "禁用" 指的是该控件不能接收任何用户的输入事件, 并且外观上往往是灰色的.

如果⼀个 widget 被禁用, 则该 widget 的子元素也被禁用.

相关函数:

isEnabled():获取到控件的可用状态.

setEnabled():设置控件是否可使用. true 表示可用, false 表示禁用.


2.geometry

英文含义为几何,实际上是x,y,width,height四个属性的统称,描述当前控件的位置和尺寸

相关函数:

geometry():获取到控件的位置和尺寸. 返回结果是⼀个 QRect, 包含了 x, y, width, height. 其中 x, y 是左上角的坐标.

setGeometry(QRect);

setGeometry(int x, int y, int width, int height);

设置控件的位置和尺寸. 可以直接设置⼀个 QRect, 也可以分四个属性单独设置.


window frame 的影响

widget作为⼀个窗口,它所附带的标题栏, 最小化, 最大化, 关闭按钮这些,称为window frame

如果 widget 作为⼀个窗口, 那么在计算尺寸和坐标的时候就有两种算法. 包含 window frame 和 不包含 window frame.

其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的方式来计算的.

其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的方式来计算的.


3.windowTitle

windowTitle即窗口标题

相关函数:

windowTitle() :获取到控件的窗口标题.

setWindowTitle(const QString& title) 设置控件的窗口标题.

注意! 上述设置操作针对不同的 widget 可能会有不同的行为.

如果是顶层 widget (独立窗口), 这个操作才会有效.如果是子 widget, 这个操作无任何效果.


4.windowIcon

windowIcon即窗口图标

相关函数:

windowIcon() :获取到控件的窗图标. 返回 QIcon 对象.

setWindowIcon(const QIcon& icon) :设置控件的窗图标.

QIcon是一个图标类,在Qt中,Qt把这些相关概念都封装成了类,便于操作

同 windowTitle, 上述操作仅针对顶层 widget 有效。

假设在d盘下有一个名为rose.jpg的图片,设置窗口图标,需要给出图标所在的具体路径

// 创建图标对象
 QIcon icon("d:/rose.jpg");
 // 设置图标
 this->setWindowIcon(icon);

绝对路径,在我们测试代码时是好用的,但是未来我们的程序给到用户,我们无法确保代码中文件的路径,与实际用户电脑上存放该图片的路径一致

Qt中存在一个qrc机制,能够从根本上解决以下问题:

  1. 确保你的图片所在的路径在目标用户机器上存在。
  2. 确保你的图片不会被用户误删。

具体操作方式为:

给Qt项目引入一个额外的xml文件(后缀名使用.qrc表示)在这个xml中把要使用的图片资源给导入进来,并且在xml中进行记录

Qt在编译项目时,就会根据qrc中描述的图片信息,找到图片内容,并且提取出图片的二进制数据,把这些二进制数据转成c++代码,最终编译到exe里。

创建文件:

创建前缀并导入图片:

这里的“前缀Prefix”,就可以理解为一个虚拟的目录,是由Qt自己抽象出来。前缀名我们可以只保留一个单独的“/”即可。

这里值得注意的是,通过此种方式导入的图片,必须和该.qrc文件处于同级目录,或其子目录中

完成之后,我们需要通过如下代码来完成图标设置:

// 访问到 rose.jpg 资源
 QIcon icon(":/rose.jpg");
 // 设置图标
 this->setWindowIcon(icon);

其中“:”表示该文件要去.qrc文件中寻找“/rose.jpg”即上文设置的前缀+文件名


5.windowOpacity

windowOpacity即窗口透明度

相关函数:

windowOpacity():获取到控件的不透明数值. 返回 float, 取值为 0.0 -> 1.0 其中 0.0 表示全透明, 1.0 表示完全不透明。

setWindowOpacity(float n):设置控件的不透明数值。


6.cursor

cursor即当前控件的鼠标光标

相关函数:

cursor():获取到当前 widget 的 cursor 属性, 返回 QCursor 对象. 当鼠标悬停在该 widget 上时, 就会显示出对应的形状。

setCursor(const QCursor& cursor) :设置该 widget 光标的形状. 仅在鼠标停留在该 widget 上时生效。

QGuiApplication::setOverrideCursor(const QCursor& cursor):设置全局光标的形状. 对整个程序中的所有 widget 都会生效. 覆盖上面的 setCursor 设置的内容。

在界面设计区我们能够看到一个控件的鼠标光标有Qt已经内置了非常多,但是这些光标都比较low,不好看,所以我们依然可以通过qrc机制,上传我们想要设置的图片,来代替原光标。

其中,图片类可以使用QPixmap,使用方式与上述窗口图标类QIcon类似

在QPixmap类中,存在一个scaled函数能够对图片进行缩放,参数即为要缩放的像素大小


7.font

font即字体。

相关函数:

font() :获取当前 widget 的字体信息. 返回 QFont 对象.

setFont(const QFont& font) :设置当前 widget 的字体信息.

谈到字体,就不得不涉及到字体的各种属性:

family :字体家族.比如 "楷体", "宋体", "微软雅黑" 等.

pointSize :字体大小

weight :字体粗细. 以数值方式表示粗细程度取值范围为 [0, 99], 数值越大, 越粗.

bold :是否加粗. 设置为 true, 相当于 weight 为 75. 设置为 false 相当于weight 为 50.

italic :是否倾斜

underline :是否带有下划线

strikeOut :是否带有删除线


8.toolTip

tooltip即提示,当我们的鼠标悬停在某个控件上时,就能弹出一个提示

相关函数:

setToolTip() :设置 toolTip.鼠标悬停在该 widget 上时会有提示说明.

setToolTipDuring() :设置 toolTip 提示的时间. 单位 ms. 时间到后 toolTip自动消失。


9.focusPolicy

设置控件获取到焦点的策略。比如某个控件能否用鼠标选中或者能否通过 tab 键选中。

所谓 "焦点" , 指的就是能选中这个元素. 接下来的操作 (比如键盘操作), 就都是针对该焦点元素进行的了. 这个对于 输入框, 单选框, 复选框等控件非常有用的.

比如我们玩游戏,通常都会先选中一个目标,然后再对该目标进行操作

一般来说,一个控件获取到焦点,主要有两种方式:

  1. 鼠标点击
  2. 键盘的Tab键

相关函数:

focusPolicy() :获取该 widget 的 focusPolicy, 返回 Qt::FocusPolicy

setFocusPolicy(Qt::FocusPolicy policy) :设置 widget 的 focusPolicy.

Qt::FocusPolicy 是⼀个枚举类型. 取值如下:

  • Qt::NoFocus :控件不会接收键盘焦点
  • Qt::TabFocus :控件可以通过Tab键接收焦点
  • Qt::ClickFocus :控件在鼠标点击时接收焦点
  • Qt::StrongFocus :控件可以通过Tab键和鼠标点击接收焦点 (默认值)
  • Qt::WheelFocus : 类似于 Qt::StrongFocus , 同时控件也通过鼠标滚轮获取到焦点 (新增
  • 的选项, ⼀般很少使用)

10.styleSheet

stylesheet即样式表,用来设置widget的样式。

鼠标右键单击对应的控件,就能找到一个“改变样式表”,点击之后就得到如下样式表编辑界面:

可以通过上述给出的专栏来设置样式,也可以通过在文本框直接输入的方式进行设置:

在文本框中设置时,应使用键值对的方式设置样式,键与值之间使用“:”分割,键值对之间使用“;”分割


关于QWidget的属性就分享这么多,在下文中,将分的各种控件,由于其均继承自QWidget,所以都拥有上述所分享的这些属性、方法,此外,也会有一些自己所独有的属性和方法。


http://www.kler.cn/a/377978.html

相关文章:

  • Linux之crontab使用
  • Golang | Leetcode Golang题解之第524题通过删除字母匹配到字典里最长单词
  • WebStorm技巧
  • STM32MP135 linux6.1.82版本移植RTL8723DS WIFI驱动
  • 鸿蒙开发案例:指南针
  • Springboot 内置缓存与整合Redis作为缓存
  • Java类和对象(上篇)
  • Github 2024-10-30C开源项目日报 Top10
  • 正则表达式学习
  • 【系统架构设计师】2024年上半年真题论文: 论模型驱动架构设计方法及其应用(包括解题思路和素材)
  • 操作系统——计算机系统概述——1.4操作系统结构
  • 【2】Elasticsearch 查询从基础到高级
  • jsweb2
  • Java实现动态切换ubuntu壁纸功能
  • 自定义日志打成jar包引入项目后不生效
  • 3D Gaussian Splatting 入门
  • 8.5K+ Star!Skyvern:一个基于LLMs和计算机视觉自动化浏览器工作流的工具
  • Day 41 || 1049. 最后一块石头的重量 II 、494. 目标和、474.一和零
  • 机器学习之fetch_olivetti_faces人脸识别--基于Python实现
  • 数据智能驱动金融策略优化:民锋智能分析技术的应用
  • 深度学习-38-基于PyTorch的卷积神经网络AlexNet
  • 【Java笔记】1-JDK/JRE/JVM是个啥?
  • Golang | Leetcode Golang题解之第518题零钱兑换II
  • pgsql数据量大之后可能遇到的问题
  • SpringCloudAlibaba实战入门之OpenFeign高级用法(十)
  • 数据结构-二叉树中的递归