Qt 4.8.5 QLabel setStylesheet忽略继承的字体

时间:2016-03-11 14:43:28

标签: qt stylesheet

我想通过setStylesheet设置一些样式属性,例如边界

label.setStylesheet("border: 1px solid white;");

之后我的标签有一个白色边框,但忽略了父窗口小部件(QDesigner)中设置的所有字体属性!

qDebug() << label->font().family();
qDebug() << label->font().rawName();

都会打印正确的字体系列,但在调用setStylesheet函数后不会应用此字体。

颜色相同。如果我通过setStylesheet()设置了一些其他属性,则不会使用Designer中通过QPlatte设置的颜色。

我不知道,但似乎我们不应该混合两种技术,或者我在这里做错了。

1 个答案:

答案 0 :(得分:2)

不幸的是,在窗口小部件的样式表中设置一个属性通常会导致需要设置所有样式属性,以及打破任何这些属性的继承。我无法在我自己的环境中重现字体继承问题(您使用的是什么版本的Qt?),但以下代码可以帮助您解决此问题。

//  Get the color of the label's parent (this).
QColor color = this->palette().windowText().color();
QString colorString = "rgb(" +
                      QString::number( color.red() ) + "," +
                      QString::number( color.green() ) + "," +
                      QString::number( color.blue() ) + ")";

//  Get the Font of the label's parent (this).
QFont font = this->font();

//  Set the Font and Color.
label->setFont( font );
label->setStyleSheet( "color: " + colorString + "; border: 1px solid white;" );

就个人而言,我尝试将所有样式保存在特定表单对象样式的表单编辑器中,或者放在顶层加载的样式表中,就像网页的CSS一样。