QWidget核心属性 二
windowOpacity
API | 说明 |
---|---|
windowOpacity() | 获取控件的不透明数值。返回float,取值为0.0 ~ 1.0 ,其中0.0表示全透明,1.0表示完全不透明. |
setWindowOpacity(float n) | 设置控件的不透明度 |
eg:
现在两个按钮控件,一个Add按钮,一个Sub按钮,当用户点击Add按钮过后可以增加窗口的透明度;当用户点击Sub按钮过后可以降低窗口的透明度;
具体实现如下:
运行结果:
cursor
API | 说明 |
---|---|
cursor() | 获取到当前控件的cursor属性,返回QCursor对象;当鼠标悬停在该控件上时,就会显示出对应的形状 |
setCursor(const QCursor&) | 设置该控件上的光标的形状,仅在鼠标停留在该控件上时生效 |
QGUIApplication::setOverrideCursor(const QCursor&) | 设置全局光标的形状,对整个程序中的控件都生效,会覆盖setCursor设置的光标 |
eg1:
通过图图形化界面创建一个按钮,当光标放在按钮控件上时,就会改变光标的形状,当光标退出按钮控件的区域时,就恢复原样:
运行结果:
通过代码来进行设置:
运行结果如下:
实际上Qt内置了很多宏来定义光标的形状,我们只需要利用这些宏来构造QCursor对象,然后在调用setCursor来设置控件的形状即可,当然,我们也可以使用图片自定义光标的形状:
接下来,我们将把这个图设置为光标:
- 创建qrc文件,将图片添加进去:
- 编写代码
- 运行结果:
font
API | 说明 |
---|---|
font() | 获取到当前控件的字体信息,返回QFont对象 |
setFont(const QFont&) | 设置当前控件的字体信息 |
关于QFont的字段:
字段 | 说明 |
---|---|
family | 字体家族,eg:“楷体”、“宋体”、“微软雅黑”等 |
pointSize | 字体大小 |
weight | 字体粗细,以数值方式表示粗细程度,取值范围是[0,99],数值越大,越粗 |
bold | 是否加粗,设置为true,相当于weight为75;设置为false,相当于weight设置为50 |
italic | 是否倾斜 |
underline | 是否自带下划线 |
strikeOut | 是否带删除线 |
使用图形化界面创建一个文本:
运行结果:
使用图形化创建有一个好处就是,可以随时预览我们设计的结果,但是缺点也很明显就是,只能静态预览,如果我想们想要做到字体随着代码的运行而改变,那么通过代码创建就不失为一个很好的选择;
代码运行结果:
toolTip
API | 说明 |
---|---|
setToolTip | 设置toolTip,鼠标悬停在控件上时又提示说明 |
setToolTipDuring | 设置toolTip的提示时间,单位ms,时间到过后,toolTip会自动消失 |
eg:
在窗口上设置两个按钮控件,一i个yes按钮,一个no按钮;
当我们将光标悬停在yes按钮上时,会提示"这是一个yes按钮";
当我们将光标悬停在no按钮上时,会提示"这是一个no按钮";
运行结果如下:
上面的方式,是通过图形化的方式来创建的,接下来我们通过代码的方式来创建一手:
具体代码如下:
运行结果:
focusPolicy
API | 说明 |
---|---|
focusPolicy() | 获取当前控件的focusPolicy,返回Qt::FocusPolicy |
setFocusPolicy(Qt::FocusPolicy policy) | 设置当前控件的focusPolicy |
Qt::FocusPolicy是一个枚举类型,枚举值有:
Qt::NoFocus//表示控件不回接收键盘焦点
Qt::TabFocus//控件可以通过Tab键来接受焦点;
Qt::ClickFocus//控件可以通过鼠标点击来接收焦点;
Qt::StrongFocus//控件可以通过Tab键和ClickFocus键来接收焦点(默认值)
Qt::WheelFocus//类似于Qt::StrongFocus,同时控件也可以通过鼠标滚轮获取焦点(一般少用)
eg:
在窗口上分别创建4个文本框,然后分别演示Qt::NoFocus、Qt::TabFocus、Qt::ClickFocus、Qt::StrongFocus;
现在是正常情况,鼠标点击和Tab键都可以在输入框之间来回切换;
接着我们将文本框1的FocusPolicy类型,设置为NoFocus来看看:
通过实验,我们发现,将文本框1的FocusPolicy设置为NoFocus过后,就无法在使用鼠标或者Tab键来切换文本框1了;
接着,我们将文本框2的FocusPolicy设置为TabFocus:
通过实验我们发现,将文本框2的FocusPolicy类型设置为TabFocus过后,文本框2的切换只能通过Tab键来完成,鼠标点击没有反应;
接着我们来将文本框3的FocusPolicy类型设置为:ClickFocus:
通过实验,我们发现当把文本框3的FocusPolicy属性设置为ClickPolicy过后,切换到文本3只能通过鼠标点击,Tab键无法进行切换;
最后,我们来将文本框4的FocusPolicy类型设置为StrongPolicy:
通过实验结果,我们发现将文本框4的FocusPolicy属性设置为StrongPolicy过后,与没设置之前效果一样,都可以通过鼠标点击和Tab键来进行切换;
styleSheet
通过 CSS 设置 widget 的样式.
CSS 中可以设置的样式属性⾮常多. 基于这些属性 Qt 只能⽀持其中⼀部分, 称为 QSS (Qt Style Sheet). 具体的⽀持情况可以参考 Qt ⽂档中 “Qt Style Sheets Reference” 章节.
eg1:
在窗口上创建一个文本,通过QSS来设置这个文本的样式:
- 在界面上创建一个Label
- 打开styleSheet窗口
- 接着我们会得到一个如下窗口:
3 - 编辑右侧的 styleSheet 属性, 设置样式
5. 运行结果:
eg2:
实现切换夜间模式.
设计思路:
在界面上放3个控件,一个label控件,一个白天切换按钮,一个黑夜切换按钮;
当我们点击白天就坏将整个界面切换到白天,当我么点击黑夜按钮,就会将整个界面切换到黑暗;
白天: 文字为黑色,背景为白色;
黑夜: 文字为白色,背景为黑色;
具体代码:
运行结果:
嗯,不错的,运行结果是符合预期的,但是有一点小瑕疵就是,白天模式和原始模式是不匹配的,按理来说,原始模式应该就是白天模式,白天模式就是原始模式,但是白天模式更白,原始模式似乎偏黄一点,这是为什么?主要是因为,刚开始的时候我们还没有点击任何按钮,因此我们的夜间模式或黑夜模式都不会神效,因此界面就是初始化颜色,当我们点击黑夜或者白天按钮过后整个界面也就会发生变化!为此,我们只需要将白天模式的背景颜色调成和原始状态一样就好了: