Qt4窗口及控件风格设置过程
由于
QWidget
一般只作为控件的承载窗口,它并没有在其
paintEvent
里面处理
QStyle
,留下了空函数体的
paintEvent
函数,那么在改变
QWidget
的背景时,要么改变其
QPalette
的属性,要么重载其
paintEvent
函数来自行绘制。
这里存在两种情况,一种是
QWidget
作为顶层窗口,此时由于它不再有父窗体,则没有继承任何
QStyle
。那么通过改变其
QPalette
可以改变背景等属性。一种是
QWidget
作为子窗口,此时它将继承父窗体的
QStyle
,那么设置
QPalette
的属性将不再起作用。
当使用
QWidget
作为子窗体时,要想让它不使用父窗体的
QStyle
,则需要在其
paintEvent
函数里设置自定义的
QSyle
,并通过该
QStyle
进行绘制。
QStyle
作为一个界于
QPainter
之上的绘制引擎,传递必要的参数给
QPainter
,使用
QPainter
完成绘制。
在这里有一个奇怪的现象。如果在实例化一个
QWidget
的位置设置其
style
,使用
setStyleSheet
函数,将会对
QWidget
及其子窗体有效。如果在
QWidget
的构造函数里使用
setStyleSheet
函数,则对该
QWidget
无效,而
QWidget
上的子窗体有效。但是如果在实例化如
QPushButton
等控件时对该控件使用
setStyleSheet
,或者在
QPushButton
构造函数里使用
setStyleSheet
,均有效。
上边提到了
setStyleSheet
函数,这个函数使用类似
CSS
样式的语法来设置
Syle
属性,参考
Qt Style Sheets
的文档可以查看其语法形式。
转载于:https://blog.51cto.com/godson/531506