最近在做一个项目,想加一点“炫”的功能----按钮闪烁(其实就是用定时器控制按钮背景的颜色,你如果有更好的方法,还请告知……),找了许多资料,都说可以使用QPalette就可以了,可是尝试了几次,发现不行啊,我是这样试的:
QPalette pal = startBtn.palette(); //startBtn是我已经定义好的QPushButton对象
pal.setColor(QPalette::ButtonText, Qt::red); //设置按钮上的字体颜色,理论上可以,实际上就是可以
pal.setColor(QPalette::Button, Qt::green); //设置按钮背景颜色,理论上可以,实际上不可以
startBtn.setPalette(pal);
运行效果
后来又从“度郎”上找到资料说是在windows中QPushButton涉及到样式表,应该设计样式表才可以
QPalette pal = startBtn.palette();
pal.setColor(QPalette::ButtonText, Qt::red); //设置按钮上的字体颜色,理论上可以,实际上就是可以
//pal.setColor(QPalette::Button, Qt::green); //设置按钮背景颜色,理论上可以,实际上不可以
startBtn.setPalette(pal);
startBtn.setStyleSheet("background-color:green");
再次运行,真的可以了,效果图
要将背景颜色设置为最初的颜色之间使用
startBtn.setStyleSheet("");
就可以了。
最后附上网友的一片关于QPalette的中文的资料(转自:http://blog.csdn.net/catamout/article/details/5545504):
调色板类QPalette QPalette类包含了Qt窗口不见的颜色组(collor group); 1.Active组,该组的颜色用户当前活动的(active)窗口,即具有键盘或鼠标焦点的窗口; 2.Inactive组,该组用语其他的窗口; 3.Disabled组,该组用语窗台为不可用的(disabled)的子窗口部件(不包含窗口). 所有Qt窗口部件都拥有一个调色板并使用它绘制自己.通常,活动状态的窗口标题栏为蓝色的,而非活动(inactive)状态的窗口的标题栏显示为灰色的;活动状态的窗口和非活动状态的窗口都可以包含状态为不可用的窗口部件,一个不可用的窗口部件(包包含的子窗口部件)显示为灰色的,用户是无法同它进行交互的.通过改变窗口部件的调色板的各个组中的颜色,能够改变窗口部件的显示颜色,比如改变背景色,文本颜色等. 可以通过QWidget::palette()获取一个窗口部件的调色板,然后通过QWidget::setPalette()函数为该窗口部件设置修改后的调色板.或通过QApplication::palette()函数获取应用程序的调色板,并通过QApplication::setPalette()为该应用程序设置修改后的调色板.修改一个窗口部件的调色板只会影响到改窗口部件以及子窗口部件(不包含子窗口);而改变一个应用程序的调色板将会影响到该应用程序的所有窗口部件.当对一个窗口部件的调色板已经作了修改后,再对其父窗口部件调色板的修改不会影响到该窗口部件的调色板;同样,对应用程序调色板的修改不会影响已经单独做了调色板修改的窗口部件. 调色板类QPallete提供了颜色角色(color roles)概念,是指当前GUI界面中颜色的职责,通过枚举变量QPalette::ColorRole来定义,比较常用的颜色角色有: QPalete::Window,通常指窗口部件的背景色; QPalette:WindowText,通常指窗口不见的前景色; QPalette::Base,指文本输入窗口部件(比如QtextEdit,QLinedit等)的背景色. QPalette::Text,与QPalette::Base一块使用,指文本输入窗口部件的前景色; QPalette::Button,指按钮窗口部件的背景色; QPalette::ButtonText,指按钮窗口部件的前景色.
例: QPalette pal = pushButtonCancel->palette(); 按钮pushButton的字体颜色为红色 |