【发布时间】:2015-05-04 13:58:54
【问题描述】:
我正在 OSX Mavericks 上编写新手 Qt5 代码,并且希望只覆盖给定小部件的 StyleSheet 的一个属性:值对。
如果我运行以下独立的演示代码:
#include <QApplication>
#include <QMainWindow>
#include <QtGui>
#include <QPushButton>
int
main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow* mw = new QMainWindow();
QPushButton* AButton = new QPushButton( "A Button", mw );
mw->show();
return app.exec();
}
我得到了一个不错的按钮,默认为 Macintosh 风格——圆角、按下时的标准 OSX 蓝色等:
但是,如果我将样式表设置为使背景按钮颜色为红色,我似乎在此过程中失去了所有其他 OSX 样式默认值——不再有圆角、标准边距等:
#include <QApplication>
#include <QMainWindow>
#include <QtGui>
#include <QPushButton>
int
main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow* mw = new QMainWindow();
QPushButton* AButton = new QPushButton( "A Button", mw );
AButton->setStyleSheet("QPushButton { background-color: red; }");
mw->show();
return app.exec();
}
结果如下:
如何只覆盖一个属性:值对,同时保留小部件的其余样式元素,例如在上面的示例中,将背景颜色设为红色,但保持所有边框圆角、边距等相同?
非常感谢
【问题讨论】:
-
您可以尝试使用
AButton->setStyleSheet(AButton->styleSheet() + "...");将新样式添加到现有样式中 -
谢谢,但这似乎仍然会覆盖所有其他平台默认值(我使用了
AButton->setStyleSheet( AButton->styleSheet() + "QPushButton { background-color: red; }");) -
啊等等...您所说的不是被覆盖的 CSS 样式属性,而是 系统样式 QtWidget 的样式引擎试图模仿。当您手动指定某些属性时,它无法模仿系统样式,AFAIK,并且当样式引擎无法适应您指定的 CSS 属性时,它会退回到“旧 Windows 样式”。尝试改用调色板。看看
QWidget::setPalette()和palette(),然后尝试为一些角色设置颜色(play around 用于按钮背景,我不记得了)。这将被样式引擎考虑。 -
看起来
QMacStyle忽略了用于设置背景的QPalette::Button颜色。您可以使用QPalette::Text设置文本颜色。
标签: qt qt5 qtstylesheets qpushbutton