1. 控件概述
在QT中内置了许多的控件提供给程序员使用,如pushbutton按钮,label标签等,所以程序员不需要去开发额外的控件,极大增加了生产效率。
在QtCreater 的设计界面的左边我们可以看到许多的内置控件,拖到窗口中就可以直接使用。

2. QWidget
QT中大多数控件都是继承于QWidget的,所以不同的控件也会有一些相同的共性。
在QtCreater 的设计界面的右边可以看到QWidget的一些属性。
这些属性可以直接在右边的框中修改,也可以通过代码的形式修改。

2.1 enable
相关API:
isEnable() 能够获取控件的可用状态
setEnable() 设置控件是否可以,true表示可以,flase表示禁用
所谓禁用在QT中的表现形式就是:
1)该控件不能接受任何用户输入的事件,并且变为灰色。
2)该控件下的子控件也会被禁用
一个demo来测试控件的enable属性:
可以看到,button按钮就变成灰色的了,并且是点击不了的。

使用另外一个控件来控制button的可用状态:

运行并尝试切换控件状态,此时是可以对button的可用状态进行切换的。


2.2 geometry
geometry的意思就是几何,那么在QT中这个属性代表的是某个控件的一个集合体属性,其中包括左上角的x坐标,y坐标,以及控件的宽度wight,控件的高度height。

相关API:
geometry() 获取一个控件的位置和尺寸信息,返回一个QReact,其中包含了x,y,widht,height。
setGeometry() /setGeometry(int x, int y, int width, int height)
设置控件的位置和尺寸,可以直接设置一个QReact,也可以分别设置四个属性。
1)一个demo来测试这几个API以及了解geometry属性:
首先创建了五个控件,并且重命名了它们的ObjectName

然后将四个控件分别对中间target控件的x和y属性进行修改,这里一旦修改rect的x或者y,整个矩形的宽和高都会随之改变,如果我们要实现平移按钮的感觉,需要使用setGeometry的第二个重载版本。

实现平移按钮:此时宽度和高度没有改变,只有x和y在改变

2)使用geometry()创建一个整蛊小程序
这是一个"无法拒绝"的整蛊小程序,按下同意按键拒绝按键会被禁用。按下拒绝按键,按键会被弹飞。

如果做的想要做得"更绝"一点,我们可以在按下拒绝按钮的槽函数中加上关机指令,只有按下同意按钮才可以解除关机状态。当然你也可以拒绝以后直接禁用掉同意的按钮,或者直接写解除关机状态。

运行实例:


2.3 window frame
window frame 的影响
1)如果 widget 作为⼀个窗⼝ (带有标题栏, 最⼩化, 最⼤化, 关闭按钮), 那么在计算尺⼨和坐标的时候就有两种算法。
2)包含 window frame 和 不包含 window frame.其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的⽅式来计算的。
3)其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的⽅式来计算的。
4)当然, 如果⼀个不是作为窗⼝的 widget , 上述两类⽅式得到的结果是⼀致的。

使用代码来解释geometry 和 frameGeometry 的区别:
可以看到这里frameGeometry 的大小是要比geometry 大的,并且它们的其中的属性也有细微的偏差。

注意,frameGeometry的调用要在构造widget对象以后,在构造⽅法中, Widget 刚刚创建出来, 还没有加⼊到对象树中,此时也就不具备 Window frame。
2.4 windowTitle
相关API:
windowTitle()获取到控件的窗口标题
setWindowTitle(const Qstring & title) 设置控件的窗口标题
注意:上述的API只对顶层的widget也就是独立窗口才有效,其他的子widget是无效的。
可以看到这里我们可以获取以及设置窗口的标题,但是对于button按钮无法设置。

2.5 windowIcon
相关API:
windowIcon() 获取到控件的窗口图标,返回QIcon对象。
setWindowIcon(QIcon & icon) 设置控件的窗口标题。
同WidonwTitle一样,windowIcon只针对于顶层窗口。
这里用一个demo设置一个窗口图标:
QIcon没有采用 对象树的机制,所以这里将QIcon对象创建在栈上。

可以看到窗口的图标已经被成功修修改了,但是这样的方式是不推荐的,用户可能在日常操作中不小心将图片删除了。所以我们可以使用QT中的qrc机制来将图片的二进制转换成代码,在生成exe的时候会自动将图标生成。
qrc的使用方式
1.创建一个qrc文件

2.添加qrc文件
1)创建前缀
点击Add Prefix,添加一个前缀,这是QT为qrc机制而创建的一个虚拟目录,通过这个虚拟目录来访问加载进来的文件。

2)添加图片资源
点击Add File,此时会打开一个目录,这是qrc文件所在目录,然后将需要加载的图片导入这个文件夹或者这个文件夹的子目录下,再选择这个图片文件即可。

3)使用qrc文件加载图片
这里直接使用:/加文件名,qt会自动去qrc文件中找它管理的文件。

我们可以在项目的工程文件夹中看到生成了一个qrc_resource.cpp文件,其中包括了上面那个图片的二进制数据。当编译代码的时候就会将这个二进制数据加载到exe中。

2.6 windowOpacity
相关API:
windowOpacity() 获取到控件的不透明度,返回float类型,取值为0.0 - 1.0。0.0表示全透明,1.0表示完全不透明。
setWindowOpacity(float n) 设置控件的不透明度
这里创建两个按钮来控制窗口的不透明度:
窗口在刚创建的时候的不透明度是1.0,所以无法增加

减小不透明度,直到不透明度无法减小

2.7 cursor
相关API:
cursor() 获取到当前widget的cursor属性,返回QCursor对象。当鼠标悬停在该widget时,就会显示出对应的形状。
setCursor(const QCursor& cursor) 设置该widget的光标形状。仅在鼠标在该widget上生效。
1)在图形化界面中直接设置一个widget的光标:
将按钮的光标设置为十字

2)在代码中设置按钮的光标

在Qt中内置了许多光标的类型,在Qt源码中进行查看:

3)使用图片来自定义光标
首先创建一个qrc文件管理图片,然后使用QPixmap加载图片,再通过QCursor对象设置光标

2.8 front
相关API:
font() 获取当前 widget 的字体信息. 返回 QFont 对象.
setFont(const QFont& font) 设置当前 widget 的字体信息.
关于QFront属性:
family 字体家族. ⽐如 "楷体", "宋体", "微软雅⿊" 等.
pointSize 字体⼤⼩
weight 字体粗细. 以数值⽅式表⽰粗细程度取值范围为 [0, 99], 数值越⼤, 越粗.
bold 是否加粗. 设置为 true, 相当于 weight 为 75. 设置为 false 相当于
weight 为 50.
italic 是否倾斜
underline 是否带有下划线
strikeOut 是否带有删除线
1)在图形化界面设置文本框中的文字:

2)在代码中设置widget的字体属性

2.9 tooTip
相关API:
setTooTip() 设置widget的提示词,鼠标悬停在该widet上会有提示。
setTooTipDuring() 设置提示词存在时间,单位ms。
1)使用代码设置

2)图形化界面设置
这里还可以对提示词的字体进行设置

2.10 focuPolicy
相关API:
focusPolicy() 获取widget的focusPolicy,返回Qt::focusPolicy对象。
setFocusPolicy() 设置widget的focusPolicy。
Qt::FocusPolicy 是⼀个枚举类型. 取值如下
Qt::NoFocus :控件不会接收键盘焦点
Qt::TabFocus :控件可以通过Tab键接收焦点
Qt::ClickFocus :控件在⿏标点击时接收焦点
Qt::StrongFocus :控件可以通过Tab键和⿏标点击接收焦点 (默认值)
Qt::WheelFocus : 类似于 Qt::StrongFocus , 同时控件也通过⿏标滚轮获取到焦点 (新增
的选项, ⼀般很少使⽤)。
设置label的focusPolicy:

这里可以设置4种属性,默认label是Nofocus的,也就是无法选中。