Qt常用控件之QWidget

 目录

enabled

geometry

女神表白模拟器

WindowFrame的影响

windowTitle

windowIcon

qrc的使用

windowOpacity

cursor

font

toolTip

focusPolicy

styleSheet


关于控件

一个图形化界面上的内容,不需要咱们全都从零去实现
Qt 中已经提供了很多内置的控件了(按钮,文本框,单选按钮,复选按钮,下拉框.….)

控件的英文 widget,我们是非常眼熟了,在前面的学习中,创建新项目时,选择继承的父类是 QWidget,最终Qt会基于 QWidget,自动生成一个继承自 QWidget 的类 Widget

控件是界面上的各种元素,各种部分的统称

在 Qt Creator 中,点开 widget.ui 文件
Qt Designer 左侧的这一长条, 就是 Qt 给咱们已经内置好的控件了:

如果现在进行的操作,是属于程序一启动之后要呈现的一个效果,就设置在构造函数中


QWidget核心属性

Qt 中的各种控件都是继承自 QWidget 类

Qt Creator 右侧, 可以看到 QWidget 的各种属性,并且在这里也能直接进行编辑:

这些属性不需要大家每个都去了解,只需要认识其中的一些常用的、重要的属性即可


enabled

enabled 描述了一个控件是否处于 可用 状态

与 可用 相对的概念是 禁用:

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

  • 如果一个 widget 被禁用,则该 widget 的子元素也被禁用

获取和设置 enabled 的状态:

              API                                      说明
       isEnabled() 获取到控件的可用状态
      setEnabled() 设置控件是否可使用,true 表示可用,false 表示禁用

下面创建一个项目,采用纯代码的方式创建一个按钮
将按钮设置为禁用状态,并关联槽函数:

运行程序,观察效果,按钮是灰的,点击没有反应:


上面这种方式是在构造函数中直接禁用,下面采用点击其他按钮的方式禁用

在同一个界面中,要求不同的控件的 objectName 也是必须不同的(不能重复)
后续就可以通过 ui->objectName 方式来获取到对应的控件对象了

此时采用图形化的方式创建按钮:

此时:
ui->pushButton        // 可以得到第一个按钮对应的对象
ui->pushButton_2    // 可以得到第二个按钮对应的对象

这就是元编程,Qt 会根据 ui 文件,生成一个 ui_widget.h 文件
生成的过程中就会感知到界面上都有哪些控件,以及每个控件的objectName

当前自动生成的 objectName 是有规律的,这个名字就是根据控件的类型 +下划线 + 数字
但是很明显,以数字的方式命名,不是一个好的编程习惯,因为无法明确表达含义

所以将 切换可用状态 按钮的 objectName 改为:pushButton_enable:

此时将两个按钮都转到槽,自动生成槽函数,一个执行 qDebug,一个切换 enabled状态:

运行程序,点击第一个按钮,会打印日志:

点击 切换可用状态 后,第一个按钮变灰:

再点击 切换可用状态,第一个按钮 又恢复正常:


geometry

可以把 geometry 看做 x、y、width、height 这四个属性的统称,也就是表示当前空间的位置和尺寸

具体如下图所示:

获取和设置 geometry 的状态:

                 API                                           说明
           geometry()

获取到控件的位置和尺寸,返回结果是一个 QRect

其中x,y是左上角的坐标,包含了x、y、width、height

setGeometry(QRect)

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

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

move 和 geometry:

  • move 只是修改位置

  • setGeometry 既可以修改位置, 又可以修改尺寸


下面使用图形化界面的方式创建一个 pushButton,改名为 target:

并将其 objectName 改为 pushButton_target:

再创建一个 按钮,改名为 up:

也将其 objectName 改为 pushButton_up:

再复制三份和 up 按钮大小相同的按钮,也将它们的 objectName 改为按钮名,最终变为:

我们期望通过点击这几个按钮,就能够修改 target 按钮的 geometry


下面通过右键,生成这四个按钮的槽函数,来控制 target 按钮的位置和大小
需要注意,这里的坐标系是左手系,所以向上移动是 - y,向下移动是 + y

当前代码实际执行的效果,是在调整左上角位置,左上角位置改变的同时,高度和宽度也同时发生了改变


如果想要让这个按钮能够平移(宽度高度不变,整个按钮的位置都发生改变)

刚才的代码,修改的是 QRect 对象的 x和 y,这样的修改就会使 QRect 宽度高度发生改变

如何才能实现"平移"的效果,保持尺寸不变,整个按钮位置变化?
即不再修改 QRect,而是通过 QRect 基于 setGeometry 第二个版本的函数,重新设置位置即可

运行结果如下,就实现了按钮的位置发生改变的需求:


女神表白模拟器

首先在 图形化界面,标签上输入一行文本:女神女神我喜欢你,能不能做我女朋友呀
下面两个按钮,一个是欣然同意,一个是残忍拒绝

下面利用 geometry 控件,能够做到:
女神点击同意按钮时,正常显示文本,邀请女神去吃饭
女神点击拒绝按钮时,拒绝按钮刚一按下,还没松开,就随机变换位置,让女神点不到

首先界面如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值