常用控件(二)
- 一.cursor(光标形状)
- 二.font(字体信息)
- 三.toolTip(提示显示)
- 四.focusPolicy(焦点)
- 五.styleSheet(文本样式)
一.cursor(光标形状)
第一种方式:图形化界面
第二种方式:代码
自定义光标
Qt允许使用自己的图片作为光标,这里需要使用qrc机制,如果不了解的可以看看上一篇博客。
二.font(字体信息)
关于QFont:
代码示例:Qt Designer中设置字体属性
第一种:在图形化界面操作
第二种:纯代码
三.toolTip(提示显示)
toolTip只是给⽤⼾看的.在代码中⼀般不需要获取到toolTip。
代码示例:设置按钮的toolTip
四.focusPolicy(焦点)
设置控件获取到焦点的策略.⽐如某个控件能否⽤⿏标选中或者能否通过tab键选中。界面上有一个输入框.此时必须要选中这个输入框,接下来键盘按键才会输入到输入框中.如果选中的是别的控件,或者别的窗口,此时键盘的输入就不会进入到这个输入框中.
Qt::FocusPolicy 是⼀个枚举类型.取值如下:
Qt::NoFocus :控件不会接收键盘焦点
Qt::TabFocus :控件可以通过Tab键接收焦点
Qt::ClickFocus :控件在⿏标点击时接收焦点
Qt::StrongFocus :控件可以通过Tab键和⿏标点击接收焦点(默认值)
Qt::WheelFocus :类似于 Qt::StrongFocus ,同时控件也通过⿏标滚轮获取到焦点(新增
的选项,⼀般很少使⽤).
代码演示:理解不同的focusPolicy
1.在界⾯上创建四个单⾏输⼊框(Line Edit)
2.修改四个输⼊框的 focusPolicy 属性为 Qt::StrongFocus (默认取值,⼀般不⽤额外修改)
此时运⾏程序,可以看到,使⽤⿏标单击/tab,就可以移动光标所在输⼊框.从⽽接下来的输⼊就是针对这个获取焦点的输⼊框展开的了.
3.修改第⼆个输⼊框的 focusPolicy 为 Qt::NoFocus ,则第⼆个输⼊框不会被tab/⿏标左键选中.
此时这个输⼊框也就⽆法输⼊内容了.
4.修改第⼆个输⼊框 focusPolicy 为 Qt::TabFocus ,则只能通过tab选中,⽆法通过⿏标选中.
5.修改第⼆个输⼊框 focusPolicy 为 Qt::ClickFocus ,则只能通过鼠标选中,⽆法通过Tab选中.
五.styleSheet(文本样式)
通过CSS设置widget样式.
CSS(Cascading Style Sheets 层叠样式表)本⾝属于⽹⻚前端技术.主要就是⽤来描述界⾯的样式.所谓"样式",包括不限于⼤⼩,位置,颜⾊,间距,字体,背景,边框等.我们平时看到的丰富多彩的⽹⻚,就都会⽤到⼤量的CSS.Qt虽然是做GUI开发,但实际上和⽹⻚前端有很多异曲同⼯之处.因此Qt也引⼊了对于CSS的⽀持.
CSS中可以设置的样式属性⾮常多.基于这些属性Qt只能⽀持其中⼀部分,称为QSS(Qt Style Sheet).具体的⽀持情况可以参考Qt⽂档中"Qt Style Sheets Reference"章节.
代码⽰例:设置⽂本样式
此处的语法格式同CSS,使⽤键值对的⽅式设置样式.其中键和值之间使⽤ : 分割.键值对之间使⽤; 分割.另外,Qt Designer只能对样式的基本格式进⾏校验,不能检测出哪些样式不被Qt⽀持.⽐如 textalign: center 这样的⽂本居中操作,就⽆法⽀持.
代码⽰例:实现切换夜间模式.
在界⾯上创建⼀个多⾏输⼊框(Text Edit)和两个按钮。objectName 分别为 pushButton_light 和pushButton_dark。
编写按钮的slot函数.
可以看到上面我们都是用white这样确切的表示,实际上它可以自己搭配颜色(通过三原色来搭配)。
关于计算机中的颜⾊表⽰
计算机中使⽤"像素"表⽰屏幕上的⼀个基本单位(也就是⼀个发亮的光点).
每个光点都使⽤三个字节表⽰颜⾊,分别是R(red),G(green),B(blue)⼀个字节表⽰(取值范围0-255,或者0x00-0xFF).
混合三种不同颜⾊的数值⽐例,就能搭配出千千万万的颜⾊出来.
• rgb(255, 0, 0) 或者 #FF0000 或者 #F00 表⽰纯红⾊.
• rgb(0, 255, 0) 或者 #00FF00 或者 #0F0 表⽰纯绿⾊.
• rgb(0, 0, 255) 或者 #0000FF 或者 #00F 表⽰纯蓝⾊.
• rgb(255, 255, 255) 或者 #FFFFFF 或者 #FFF 表⽰纯⽩⾊.
• rgb(0, 0, 0) 或者 #000000 或者 #000 表⽰纯⿊⾊.
当然,上述规则只是针对⼀般的程序⽽⾔是这么设定的.实际的显⽰器,可能有8bit⾊深或者10bit⾊深等,实际情况会更加复杂