Qt——QWidget

目录

QWidget是什么

QWidget常用属性及其方法

enable属性

geometry属性

[关于window frame](#关于window frame)

windowTitle属性

windowIcon属性

关于qrc机制

windowOpacity属性

cursor属性

font属性

toolTip属性

focusPolicy

styleSheet

关于颜色


QWidget是什么

QWeight是一个类,它对于我们学习Qt是比较重要的,因为****大多数控件类都是继承自QWeight这意味着我们通过学习QWeight我们能学习会使用大多数控件的共有属性和方法。


QWidget常用属性及其方法

enable属性

|--------------------------------------|----------------------|--------------------------------------|
| 属性作用 | 相关API | API作用 |
| 表示控件是否可使用(true 表示可用, false 表示禁用) | isEnabled() | 获取到控件的可用状态. |
| 表示控件是否可使用(true 表示可用, false 表示禁用) | setEnabled(bool) | 设置控件是否可使用. true 表⽰可用, false 表示禁用 |

注意:一个控件被禁用,这个控件的子控件都被禁用


geometry属性

geometry是四个属性的统称:x,y,width,height(QRect是封装了这四个属性的类),而不是一个属性,它们共同表示控件的位置和尺寸:

|------------------------|----------------------------------------------------------|----------------------------------------------------------|
| 属性作用 | 相关API | API作用 |
| 表示控件的几位置和尺寸(单位:像素) | geometry() | 获取到控件的位置和尺⼨. 返回结果是⼀个 QRect, 包含了 x, y, width, height。 |
| 表示控件的几位置和尺寸(单位:像素) | setGeometry(QRect) | 设置控件的位置和尺寸. 可以直接设置⼀个 QRect, 也可以分四个属性单独设置 |
| 表示控件的几位置和尺寸(单位:像素) | setGeometry(int x, int y, int width, int height) | 设置控件的位置和尺寸. 可以直接设置⼀个 QRect, 也可以分四个属性单独设置 |

如果我们只想修改一个控件的位置而不想修改尺寸,那么可能是这样做:

但是x,y代表的是控件左上角的位置而不是整个控件的位置,如果只改变x,y,那么虽然我们没有改动width或者height,由于Qt内部对QRect的处理可能会像拉伸一样把我们的控件尺寸改变,最好的做法还是直接设置:

如果只想改变位置的话,还有一种更容易的方式,就是直接调用控件的move函数,也不会改变尺寸。

注意:控件的位置是以父控件的左上角为原点的。


关于window frame

window frame就是窗口的框框(下图中的灰色和蓝色部分):

他是自动带上的,因此我们获取或者设置位置的时候就有两种方式,一种考虑框框,另一种不考虑。geometryAPI是不考虑的,framegeometryAPI是考虑的。

注:一般来说灰色部分为1个像素。


windowTitle属性

|---------------|-----------------------------------------------|----------------|
| 属性作用 | 相关API | API作用 |
| 设置控件的窗口标题 | windowTitle() | 获取到控件的窗口标题 |
| 设置控件的窗口标题 | setWindowTitle(const QString& title) | 设置控件的窗口标题 |

注意:如果是顶层 widget (独立窗口), 这个操作才会有效。如果只是内部控件是没用的。


windowIcon属性

|---------------|-------------------------------------------|----------------|
| 属性作用 | 相关API | API作用 |
| 设置控件的窗口图标 | windowIcon() | 获取到控件的窗口图标 |
| 设置控件的窗口图标 | setWindowIcon(const QIcon& icon) | 设置控件的窗口图标 |

QIcon对象是图标类,通过路径字符串来构造。

我们来使用一下这个属性:

注意:如果是顶层 widget (独立窗口), 这个操作才会有效。如果只是内部控件是没用的。


关于qrc机制

我们使用setWindowIcon设置窗口图标的时候,要指明这个图片所在的路径(无论是绝对路径还是相对路径,一般是相对路径,因为用户的路径是不确定的),但是如果将图片保存在某个文件夹中,一旦被误删除,程序就再也无法生成图标了,而qrc机制就是为了解决这个问题。

qrc的解决方法很粗暴:将图片二进制保存在一个数组中,在编译的时候将其编译到可执行文件中去,做到"与目录无关"。使用qrc机制的具体过程如下:

首先创建一个后缀为.qrc的文件**,qrc 文件是⼀种XML格式的资源配置文件, 它用XML记录硬盘上的图片文件和随意指定的资源名称(虚拟前缀+图片文件名)。应用程序通过资源名称来访问这些资源。**

然后进入下面这样的页面

设置虚拟路径前缀

设置图片文件,默认qrc只能添加同级目录或者其子目录下的图片文件

出现下面这样的标识表示设置成功

然后我们编译文件,发现在可执行程序文件的统计目录下多了这样的文件:

打开qrc_my.cpp文件查看其中的内容如下(的确是二进制数组)

我们在程序中访问这个图片如下:

好,接下来我们捋顺一下qrc机制的思路:

  1. 为了触发并支持Qt的qrc机制,我们需要创建一个.qrc文件,然后根据Qtcreactor的引导,创建虚拟路径前缀(其实就相当于虚拟路径)与实际图片之间的"映射"。
  2. 接下来我们在编译GUI程序时,Qt首先检查.qrc文件,读取图片文件,然后将图片二进制存储在.cpp文件中的二进制数组中,并通过某种手段,把虚拟路径与这个数组联系起来(这使得在程序中访问虚拟路径就相当于访问二进制数组,也就相当于访问图片)。
  3. 之后才开始编译程序(图片二进制的.cpp文件也被编译进可执行文件中去了)。至此我们的可执行文件中有了图片。
  4. 在GUI程序执行过程中,一但发现路径是以":"开头,就知道这是使用了qrc机制的虚拟路径,接着读取虚拟路径,通过它找到图片二进制数组,显示图片。

正是因为上面的机制,编程者在编写图片访问路径时,路径必须是":"+"虚拟路径前缀"+"图片文件名"


windowOpacity属性

|---------------|------------------------------------|---------------------------------------------------------------------|
| 属性作用 | 相关API | API作用 |
| 设置控件的不透明度 | windowOpacity() | 获取到控件的不透明数值,返回 float, 取值为 0.0 -> 1.0 其中 0.0 表示全透明, 1.0 表示完全不透明 |
| 设置控件的不透明度 | setWindowOpacity(flo at n) | 设置控件的不透明数值 |

注意:

  1. 当我们设置不透明度的时候,设置成的值可能比我们期望的值有偏差,这是浮点数的存储方式导致的结果。
  2. setWindowOpacity函数内部会做检查,如果要设置的值小于0或者大于1,就不做理会。

cursor属性

|------------|-----------------------------------------------------------------------|------------------------------------------------------|
| 属性作用 | 相关API | API作用 |
| 设置光标样式 | cursor() | 获取到当前widget的cursor属性, 返回QCursor对象 |
| 设置光标样式 | setCursor(const QCursor& cursor) | 设置该控件上光标的形状. 仅在鼠标停留在该widget上时生效 |
| 设置光标样式 | QGuiApplication::setOverrideCursor(co nst QCursor& cursor) | 设置全局光标的形状. 对整个程序中的所有 控件都会生效. 覆盖上面的setCursor设置的内容 |

我们使用一下这个属性(Qt作用域里可以找到很多鼠标样式):

不仅可以使用Qt内置的光标样式,我们还可以用图片自定义光标的样式:

注意:控件的光标属性会被应用到其子控件上,除非其子控件单独设置了光标属性。


font属性

|----------------|---------------------------------|----------------------------|
| 属性作用 | 相关API | API作用 |
| 设置控件中的字体属性 | font() | 获取当前控件的字体信息. 返回QFont对象 |
| 设置控件中的字体属性 | setFont(const QFont& font) | 设置当前空间的字体信息 |

字体的大多属性都被封装在QFont中,使用QFont就可以查询和设置字体属性,下面是关于QFont中属性的介绍:

使用示例如下:


toolTip属性

|----------------|--------------------------------------|------------------------------|
| 属性作用 | 相关API | API作用 |
| 设置控件中的字体属性 | setToolTip(const QString & tip) | 设置 toolTip⿏标悬停在该控件上的提示说明 |
| 设置控件中的字体属性 | setToolTipDuration(int msec) | 设置toolTip提示的时间,单位是ms |


focusPolicy

控件获取焦点才能把用户的动作捕捉到,比如输入框没有焦点就无法输入

|------------------|----------------------------------------------|-------------------------------------------------|
| 属性作用 | 相关API | API作用 |
| 表示控件获取到焦点的策略 | focusPolicy() | 获取该 widget 的 focusPolicy, 返回Qt::FocusPolicy |
| 表示控件获取到焦点的策略 | setFocusPolicy(Qt::FocusPolicy policy) | 设置 widget 的 focusPolicy |


styleSheet

|-------------|------------------------------------------------|------------------|
| 属性作用 | 相关API | API作用 |
| 表示控件的样式 | setStyleSheet(const QString & stylesheet) | 给控件添加一种或多种样式 |

Qt使用的是QSS样式,类似于CSS风格,给控件设置样式的格式是"样式"+":"+"值"+";"。例如:


关于颜色

我们知道计算机显示器是由很多个像素点组成的,比如我们想在显示器上打印一个汉字,那么就让某些像素点组成汉字轮廓并通过色差显示出来。我们设置窗口大小也经常使用像素作为单位。

每个像素点就像小灯泡,可以有红,绿,篮三原色(即RGB),调整像素点的三原色比例就可以使得像素点显示出不同的颜色。计算机通常使用一个字节表示一种颜色的值(0-255),所以我们表示颜色可以使用rgb(红色值,绿色值,蓝色值),也可以使用类似于**#FF00FF****这样的十六进制直接表示。**

相关推荐
时艰.2 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
梵刹古音2 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法
梵刹古音2 小时前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式
Yvonne爱编码3 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
一方_self3 小时前
了解和使用python的click命令行cli工具
开发语言·python
南宫码农3 小时前
我的电视 - Android原生电视直播软件 完整使用教程
android·开发语言·windows·电视盒子
CoderCodingNo3 小时前
【GESP】C++四级/五级练习题 luogu-P1223 排队接水
开发语言·c++·算法
sycmancia4 小时前
C++进阶01——示例
开发语言·c++
CoderCodingNo4 小时前
【GESP】C++五级/四级练习题 luogu-P1413 坚果保龄球
开发语言·c++·算法