2009-09-28 28 views
1

我試圖使用Qt樣式表來設計合理複雜的UI。到目前爲止事情進展相當順利,但我遇到了一個難題:如何計算出使用Qt樣式表定位哪個小部件

如何確定我應該針對某個用戶界面的特定部分定位的小部件名稱?例如,如果我想更改QTableView單元格中的字體大小,是否要編寫一個針對QTableView的樣式?或者也許QAbstractScrollArea?或者也許QAbstractitemDelegate?事實證明,這些似乎都行不通 - 我認爲這是可以做到的,但是這是一個確定小部件魔法組合是如何瞄準UI正確部分的案例。

style sheet guide會有一些幫助,但似乎缺少了很多的信息 - 定製QTableView中只提到自定義單元格背景顏色的例子,並沒有提及更換字體顏色,大小,面部,網格線等

我在這裏錯過了什麼?也許使用樣式表是錯誤的路要走?我當然希望不會,因爲替代方案(來自QStyle)看起來要複雜得多。

歡呼聲中,在項目視圖

+0

那麼你說在你的QApplication實例上調用setStyleSheet(「QTableView {background-color:yellow}」)什麼都不做?你能舉出你嘗試過的例子嗎? – Troubadour 2009-09-28 16:44:17

+0

不,對不起 - 我只是說,試圖處理某些屬性(在我的情況下字體大小)應用到表視圖時什麼也不做。 – Thomi 2009-09-29 07:49:55

+0

你可以發佈你的代碼嗎? 當你做這樣的事時會發生什麼: QTableView font-size:12px; 選擇顏色:黑色; selection-background-color:black; } – 2009-09-29 09:19:39

回答

3

渲染項目是由委託完成。自Qt 4.4以來,默認情況下,內置的item視圖默認使用了一個風格可以授權的代理實現(請參閱blog post),但您似乎希望獲得更多的控制權限,以允許您執行此操作。

在這種情況下,請確保您的模型的data()方法返回適當的外觀相關值ItemDataRoles(我認爲Qt :: FontRole會特別感興趣)。如果這還不夠,或者如果這是不可能的,你應該子類QStyledItemDelegate並重新實​​現其paint()方法。

對於網格線,QTableView具有gridStyle屬性。

+0

嗨, 但是,博客文章幫助很多,但他們使用的示例更改背景顏色和邊框 - 我似乎無法更改行高或字體大小。 – Thomi 2009-09-29 08:42:17

+0

Thomi:就像我在答案中提出的那樣,這些東西不是(據我所知)風格能夠。確保你的模型返回一個QFont實例作爲FontRole的數據,一個QSize實例作爲SizeHintRole的數據 – IgKh 2009-10-01 22:24:41

相關問題