2016-03-11 89 views
2

我想通過setStylesheet設置一些樣式屬性,例如,邊框Qt 4.8.5 QLabel setStylesheet忽略繼承字體

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

之後,我的標籤上有一個白色的邊框,但在父控件(QDesigner)設置所有字體屬性都將被忽略!

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

都打印了正確的字體系列,但是在setStylesheet函數被調用後,這不會被應用。

與顏色相同的東西。如果通過setStylesheet()設置其他屬性,則不會使用通過QPlatte在Designer中設置的顏色。

我不知道,但似乎我們不應該混合兩種技術,或者我在這裏做錯了什麼。

回答

1

不幸的是,在小部件的樣式表中設置一個屬性通常會導致需要設置所有樣式屬性,以及中斷任何這些屬性的繼承。我無法在我自己的環境中重現字體繼承問題(您使用的是哪個版本的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的網頁。