2011-03-31 58 views
12

我有一個QLabel與Qt的樣式,設置一個黑暗的背景:如何使用樣式表自定義QLabel中鏈接的外觀?

QLabel { 
background: black; 
color: white; 
} 

這一點,直到我與嵌入式URL添加文本和設置Qt::TextFormatQt::RichText工作正常。鏈接顯示爲默認的深藍色,在深色背景下很難閱讀。

我試圖通過一個樣式定製它,如:

a { color: white; } 
QLabel!visited { color: white; } 

但這並不產生任何影響。有一兩件事似乎工作正在改變應用程序的QPalette

QPalette newPal(qApp->palette()); 
newPal.setColor(QPalette::Link, Qt::white); 
newPal.setColor(QPalette::LinkVisited, Qt::white); 
qApp->setPalette(newPal); 

但是這需要進行硬編碼的顏色。有沒有什麼辦法可以從樣式表中設置顏色?

編輯:

我發現了自定義調色板的進一步的問題。如果我只想修改我的小部件的調色板(在上面的示例中用widget代替qApp),那麼這不起作用。我不想影響應用中的所有其他QLabels,那麼如何限制對此小部件的調色板更改?

回答

2

簡短的回答是沒有。最近我不得不這樣做。

  1. QLabel!visited不起作用,因爲Qt沒有跟蹤QLabel是否被訪問過。
  2. QLabel { color: ... }不適用於鏈接。找不到爲什麼,但我發現在這種情況下建議使用QPallete
+0

我想我得出了同樣的結論 - 請參閱我的其他評論 – 2011-04-01 07:56:16

+4

QLabel()。setText(' something' ) – Asi 2016-10-14 22:10:16

5

我已經很小的成功明確地設置QPalette - 它適用於如果您爲整個應用程序設置它,但不是如果您將其設置在小部件中。最後,我需要做的最簡單的事情就是使用QTextBrowser,而不是支持HTML的subset。然後,我可以使用普通的CSS樣式表覆蓋的鏈接的顏色:

QTextBrowser browser; 
// IMPORTANT! - set the stylesheet before the content 
browser->document()->setDefaultStyleSheet("a {color: white; }"); 
browser->setText(html); 
5

一種方法是添加style="color: whatever"或一類的鏈接的內<span>。我還沒有想出如何將其應用於整個應用程序,但這是一個好的開始。

+0

這是唯一的實際答案。請注意,Qt設計器似乎爲每個鏈接顯式着色,這會覆蓋全局樣式表中的任何默認值。 – 2017-10-11 11:24:35