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.rhkb.cn/news/461530.html

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

相关文章

最经典盲超分辨率数据集

一、背景 底层视觉的发展是否能够让我们真正地看清这个世界呢? 在单图超分中,非盲超分已经发展得较为成熟了,而盲超分和真实超分仍然有很多问题尚未解决。在我看来,盲超分只是真实超分的一个过渡,由于真实世界中退化…

Spring Boot 配置文件详解与最佳实践

目录 前言1. 配置文件的作用2. Spring Boot 主要配置内容2.1 Actuator 配置2.2 缓存配置2.3 核心配置2.4 数据库与数据迁移配置2.5 开发工具配置2.6 Docker Compose 配置2.7 JSON 配置2.8 安全配置 3. 多个配置文件的处理方法3.1 使用 Profile 文件区分环境3.2 结合优先级加载配…

【Stable Diffusion】

1、SD 模型 安装完SD软件后,必须搭配基础模型才能使用。 不同的基础模型,其画风和擅长的领域会有侧重。 Checkpoint大模型 大模型是 SD 的核心,用来控制生成图片的整个画面风格走势。 出图前要选择好合适的大模型,比如有些擅长…

吉林大学2023级数据结构上机实验第(1~2周)参考答案(关注我,在系统关闭后持续更新)

A 括号匹配&#xff08;进阶版&#xff09; 分数 10 编写程序检查给定字符串中包含的括号是否正确匹配&#xff0c;本题中的括号有{ }、[ ]、( )、< >四种。另外再加上一个新的约束条件&#xff1a;当有多种括号嵌套时&#xff0c;嵌套的顺序应为{ → [ → ( → <&…

【综合算法学习】(第十三篇)

目录 解数独&#xff08;hard&#xff09; 题目解析 讲解算法原理 编写代码 单词搜索&#xff08;medium&#xff09; 题目解析 解析算法原理 编写代码 解数独&#xff08;hard&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;…

【C++】string 类模拟实现:深入探索字符串操作原理

快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f6a9;在之前的文章中我们学会了对string类函数的使用&#xff0c;现在让我们对其进行模拟实现吧~&#x1f6a9; 目录 &#x1f4af;引言 &#x1f4…

[c++高阶]AVL树的深度剖析模拟实现

1.前言 如果你不知道什么是二叉搜索树&#xff0c;那么请你一定要阅读以下文章。 [c高阶]二叉搜索树深度剖析-CSDN博客 二叉搜索树如果在已经有序的情况下进行插入的话&#xff0c;那么他的时间复杂度是O(N)&#xff0c;然后有时候的时间复杂度又是O(logN)&#xff0c;因此在实…

我在命令行下剪辑视频

是的&#xff0c;你不需要格式工厂&#xff0c;你也不需要会声会影&#xff0c;更不需要爱剪辑这些莫名其妙的流氓软件&#xff0c;命令行下视频处理&#xff0c;包括剪辑&#xff0c;转码&#xff0c;提取&#xff0c;合成&#xff0c;缩放&#xff0c;字幕&#xff0c;特效等…

Tita:什么是 360 评估?

360 评估是一个专业的反馈机会&#xff0c;使一组同事和经理能够提供有关同事绩效的反馈。与仅由其经理评估员工工作绩效的典型员工绩效评估不同&#xff0c;360 评估会考虑来自同事和报告员工的反馈&#xff0c;甚至包括客户和与员工互动的其他人。 Tita&#xff1a;什么是 3…

jenkins ssh 免密报错Host key verification failed.

jenkins 发布项目&#xff0c;ssh连接远程服务器时报错&#xff1a;Host key verification failed. 解决&#xff1a; 原因是生成的sshkey不是用的jenkins用户&#xff0c;所以切换用户到&#xff1a;jenkins重新生成sshkey su jenkins ssh-keygen -t rsa ssh-copy-id -i ~/…

【Linux第七课--基础IO】内存级文件、重定向、缓冲区、文件系统、动态库静态库

目录 引入内存级文件重新使用C文件接口 -- 对比重定向写文件读文件文件流 认识文件操作的系统接口open参数 -- flagflag的内容宏的传参方式 open关闭文件写文件读文件结论 引入文件描述符fd、对文件的理解理解一切皆文件方法集文件fd的分配规则 重定向代码的重定向输入重定向输…

创意设计的起点:十大网页设计模板网站

对于网页设计领域的专业人士和爱好者而言&#xff0c;从零开始构建一个网页可能会耗费大量的时间和劳力。幸运的是&#xff0c;我们可以通过使用现成的网页模板来提升工作效率并节省宝贵的时间。一个好的模板不仅能提高设计效率&#xff0c;还能激发出卓越的创意灵感。因此&…

鸿蒙Harmony-矩形绘制组件Rect使用详解

目录 一&#xff0c;定义 二&#xff0c;绘制自定义图形 三&#xff0c;作为其他控件背景使用 一&#xff0c;定义 Rect是鸿蒙提供的矩形绘制组件&#xff0c;利用该组件可以绘制矩形背景&#xff0c;矩形图案等 官方提供的参数和属性&#xff1a; 参数&#xff1a; 参数名…

netty之bootstrap源码分析

写在前面 本文看下bootstrap类。 1&#xff1a;正文 1.1&#xff1a;干啥的&#xff1f; 在进行netty编程的时候都是先创建一个bootstrap&#xff0c;然后设置很多的东西&#xff0c;如下代码&#xff08;服务端启动代码&#xff09;&#xff1a; ServerBootstrap b new …

c# WinForm弹出窗体时不获取焦点方法

WinForm开发的软件有时候需要在屏幕右下角弹窗进行一些提示&#xff0c;通常使用new MyForm().Show()即可实现此需求。 但是当MyForm显示出来时&#xff0c;会抢走原本窗体上的光标&#xff0c;导致原本在软件上比如打字或者其他操作被中断&#xff0c;非常不人性化&#xff0…

方差和标准差哪些事儿

1.方差 在概率论与数理统计中&#xff0c;方差用来度量随机变量和其数学期望&#xff08;即均值&#xff09;之间的偏离程度。方差是各个数据与平均数之差的平方和的平均数,即: s(1/n)[(x1-x_)^2 (x2-x_)^2 …(xn-x_)^2] 其中&#xff0c;x_表示样本的平均数&#xff0c;n表示…

Hudi Upsert原理

1. 前言 如果要深入了解Apache Hudi技术的应用或是性能调优&#xff0c;那么明白源码中的原理对我们会有很大的帮助。Upsert是Apache Hudi的核心功能之一&#xff0c;主要完成增量数据在HDFS/对象存储上的修改&#xff0c;并可以支持事务。而在Hive中修改数据需要重新分区或重…

了解SQLExpress数据库

SQLExpress&#xff08;Microsoft SQL Server Express&#xff09;是由微软公司开发的一款免费且轻量级的数据库管理系统。以下是关于SQLExpress的详细解释&#xff1a; 一、定义与特点 定义&#xff1a; SQLExpress是Microsoft SQL Server的一个缩减版或基础版&#xff0c;旨在…

空天地遥感数据识别与计算

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…

JavaEE-多线程初阶(2)

目录 1.创建线程的五种写法 1.1 继承Thread类 1.2 实现Runnable接口 1.3 使用匿名内部类 1.4 使用Runnable&#xff0c;匿名内部类 1.5 引入lambda表达式 2.Thread类及常见方法 2.1 认识Thread 2.2 Thread的常见构造方法 2.3 Thread的几个常见属性 关于后台线程 关…