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****这样的十六进制直接表示。**

相关推荐
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner2 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz7 天前
QML Hello World 入门示例
qt
xcyxiner10 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner11 天前
DicomViewer (添加模型类)3
qt
xcyxiner12 天前
DicomViewer (目录调整) 2
qt
xcyxiner12 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00614 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术14 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript