API | 说明 |
---|---|
windowOpacity() | 获取控件的不透明数值。返回float,取值为0.0 ~ 1.0 ,其中0.0表示全透明,1.0表示完全不透明. |
setWindowOpacity(float n) | 设置控件的不透明度 |
eg:
现在两个按钮控件,一个Add按钮,一个Sub按钮,当用户点击Add按钮过后可以增加窗口的透明度;当用户点击Sub按钮过后可以降低窗口的透明度;
具体实现如下:
运行结果:
注意:
该属性与windowTitle、windowIcon属性一样只针对顶层窗口起效,对于普通控件不生效;
API | 说明 |
---|---|
cursor() | 获取到当前控件的cursor属性,返回QCursor对象;当鼠标悬停在该控件上时,就会显示出对应的形状 |
setCursor(const QCursor&) | 设置该控件上的光标的形状,仅在鼠标停留在该控件上时生效 |
QGUIApplication::setOverrideCursor(const QCursor&) | 设置全局光标的形状,对整个程序中的控件都生效,会覆盖setCursor设置的光标 |
eg1:
通过图图形化界面创建一个按钮,当光标放在按钮控件上时,就会改变光标的形状,当光标退出按钮控件的区域时,就恢复原样:
运行结果:
通过代码来进行设置:
运行结果如下:
实际上Qt内置了很多宏来定义光标的形状,我们只需要利用这些宏来构造QCursor对象,然后在调用setCursor来设置控件的形状即可,当然,我们也可以使用图片自定义光标的形状:
接下来,我们将把这个图设置为光标:
API | 说明 |
---|---|
font() | 获取到当前控件的字体信息,返回QFont对象 |
setFont(const QFont&) | 设置当前控件的字体信息 |
关于QFont的字段:
字段 | 说明 |
---|---|
family | 字体家族,eg:“楷体”、“宋体”、“微软雅黑”等 |
pointSize | 字体大小 |
weight | 字体粗细,以数值方式表示粗细程度,取值范围是[0,99],数值越大,越粗 |
bold | 是否加粗,设置为true,相当于weight为75;设置为false,相当于weight设置为50 |
italic | 是否倾斜 |
underline | 是否自带下划线 |
strikeOut | 是否带删除线 |
使用图形化界面创建一个文本:
运行结果:
使用图形化创建有一个好处就是,可以随时预览我们设计的结果,但是缺点也很明显就是,只能静态预览,如果我想们想要做到字体随着代码的运行而改变,那么通过代码创建就不失为一个很好的选择;
代码运行结果:
实际开发中, 字体属性如何选择, 是⼀个 “审美问题”, ⽽不是 “技术问题”. 往往需要有⼀定的艺
术细菌.
幸运的是, 公司中往往有专业的 “美⼯” / “设计” 这样的岗位, 去做这⽅⾯的⼯作. 咱们程序员只要按照⼈家给的设计稿, 把代码写出来即可. 不必过多考虑怎样搭配才好看的问题.
API | 说明 |
---|---|
setToolTip | 设置toolTip,鼠标悬停在控件上时又提示说明 |
setToolTipDuring | 设置toolTip的提示时间,单位ms,时间到过后,toolTip会自动消失 |
也有toolTip接口来获取toolTip,但是一般这个都是给用户看的,代码中一般不回获取;
eg:
在窗口上设置两个按钮控件,一i个yes按钮,一个no按钮;
当我们将光标悬停在yes按钮上时,会提示"这是一个yes按钮";
当我们将光标悬停在no按钮上时,会提示"这是一个no按钮";
运行结果如下:
上面的方式,是通过图形化的方式来创建的,接下来我们通过代码的方式来创建一手:
具体代码如下:
运行结果:
设置控件获取到焦点的“策略”,比如某个控件能否用鼠标选中或者是否可以通过Tab键选中
焦点:
所谓 “焦点” , 指的就是能选中这个元素. 接下来的操作 (⽐如键盘操作), 就都是针对该焦点元素进⾏的了. 这个对于 输⼊框, 单选框, 复选框等控件⾮常有⽤的.
eg:
当我光标选中Bing的搜索框的时候,我就可以向搜索框中进行写入,而当我光标点击其它地方,那么这时候,无论我输入什么东西,都不会被Bing搜索框接收:
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键来进行切换;
通过 CSS 设置 widget 的样式.
CSS (Cascading Style Sheets 层叠样式表) 本⾝属于⽹⻚前端技术. 主要就是⽤来描述界⾯的样式.
所谓 “样式”, 包括不限于 ⼤⼩, 位置, 颜⾊, 间距, 字体, 背景, 边框等.
我们平时看到的丰富多彩的⽹⻚, 就都会⽤到⼤量的 CSS.
Qt 虽然是做 GUI 开发, 但实际上和 ⽹⻚前端 有很多异曲同⼯之处. 因此 Qt 也引⼊了对于 CSS的⽀持.
CSS 中可以设置的样式属性⾮常多. 基于这些属性 Qt 只能⽀持其中⼀部分, 称为 QSS (Qt Style Sheet). 具体的⽀持情况可以参考 Qt ⽂档中 “Qt Style Sheets Reference” 章节.
eg1:
在窗口上创建一个文本,通过QSS来设置这个文本的样式:
5. 运行结果:
此处的语法格式同 CSS, 使⽤键值对的⽅式设置样式. 其中键和值之间使⽤ : 分割. 键值对之间使⽤
; 分割.
另外, Qt Designer 只能对样式的基本格式进⾏校验, 不能检测出哪些样式不被 Qt ⽀持. ⽐如 text-
align: center 这样的⽂本居中操作, 就⽆法⽀持.
eg2:
实现切换夜间模式.
设计思路:
在界面上放3个控件,一个label控件,一个白天切换按钮,一个黑夜切换按钮;
当我们点击白天就坏将整个界面切换到白天,当我么点击黑夜按钮,就会将整个界面切换到黑暗;
白天: 文字为黑色,背景为白色;
黑夜: 文字为白色,背景为黑色;
具体代码:
运行结果:
嗯,不错的,运行结果是符合预期的,但是有一点小瑕疵就是,白天模式和原始模式是不匹配的,按理来说,原始模式应该就是白天模式,白天模式就是原始模式,但是白天模式更白,原始模式似乎偏黄一点,这是为什么?主要是因为,刚开始的时候我们还没有点击任何按钮,因此我们的夜间模式或黑夜模式都不会神效,因此界面就是初始化颜色,当我们点击黑夜或者白天按钮过后整个界面也就会发生变化!为此,我们只需要将白天模式的背景颜色调成和原始状态一样就好了: