【发布时间】:2012-08-07 17:14:57
【问题描述】:
通过以下代码,我尝试使用QStyle.drawControl() 呈现红色按钮:
#include <QtCore/QtCore>
#include <QtGui/QtGui>
class Widget : public QWidget
{
virtual void paintEvent(QPaintEvent* event)
{
QStyleOptionButton opt;
opt.palette = QPalette(Qt::red);
opt.state = QStyle::State_Active | QStyle::State_Enabled;
opt.rect = QRect(50, 25, 100, 50);
QPainter painter(this);
style()->drawControl(QStyle::CE_PushButton, &opt, &painter);
}
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
Widget w;
w.resize(200, 100);
w.show();
return app.exec();
}
但是我得到以下结果:
如何使用QStyle.drawControl() 呈现红色按钮?
我在 Windows XP 上使用 Qt 4.8.1 和 Visal Studio 2010。
【问题讨论】:
-
您是否在此按钮上设置了一些文字?也许“Qt::red”正在落入文本颜色、背景/框架颜色
-
@Kamil Klimek:'QPalette::QPalette(Qt::GlobalColor button)' 状态的文档'从按钮颜色构造一个调色板。其他颜色会根据此颜色自动计算。窗口也将是按钮颜色';见qt-project.org/doc/qt-4.8/qpalette.html#QPalette-3。
-
@Kamil Klimek:我还测试了其他几种构建调色板的方法,但似乎无论调色板是什么,按钮最终都具有相同的颜色。
-
显式设置应用样式是否有效?也就是说,如果你调用 app.setStyle("windows");你会得到不同的结果吗?
-
@RA.:是的,它可以工作。正如 alexisdm 答案中的链接中所解释的,该问题特定于 Windows XP、Windows Vista 和 Mac 样式。