2012-08-15 49 views
2

我使用樣式表來定製我的Qt應用程序之一的外觀(實際上PyQt的,但完全一樣)。使用Qt樣式表與QMenu ::指標

下面是我使用的QMenu的樣式表的代碼。它正確地爲我的所有QMenu着色,但它也導致我的所有指示器(選中的QMenu項目)具有方格背景,就好像它們是透明的。

 
QMenu { 
    background-color: "#242424"; 
    color: "#D5D5D5"; 
} 

如果我設置的指示器背景顏色,背景指示器的中心被正確着色,但有圍繞中心廣場的大型邊框是仍然方格和檢查停止出現。

 
QMenu::indicator { 
    background-color: "#242424"; 
} 

我也注意到,在文檔示例中顯示的寬度和高度屬性不起作用。

有沒有人有試圖定製QMenus的顏色和外觀類似的問題?你是如何解決它們的?

+0

喲夥計 - 怎麼一回事呢?我有一些這樣的例子,但我現在正在手機上...只是想發表評論,所以我不會忘記 – 2012-08-18 02:55:03

回答

1

我找到了一個解決方法似乎是Qt中如何處理樣式爲QMenu ::指標documented bug

代替使用image屬性,我使用了background-image屬性,該屬性以原始大小插入圖像,而不是將其縮小。仍然無法設置指示器的大小,但可以使用padding屬性移動菜單項文本,以便顯示整個指示器圖像。

QMenu::item { 
    padding: 3px 20px; 
} 

QMenu::indicator:checked { 
    background-image: url(/path/to/image.png); 
} 
1

如果這是你在做什麼,我會使用QPalette,而不是來驅動你的顏色。但是,如果這只是冰山的一角,並且您正在尋找更多的風格定製,那麼您必須定義幾乎所有的屬性(可以在Qt文檔中找到)。無論出於何種原因,Qt似乎都不會在樣式表中進行繼承,所以如果您甚至嘗試在菜單上的某個角落進行操作,則還必須定義所有其他屬性。

另外,值得注意的是,我沒有在文檔中看到過,如果您想要修改樣式表,但仍然可以訪問調色板顏色,則可以在樣式表中使用調色板(ColorRole)像這樣:

QMenu { 
    background-color: palette(Window); 
} 

無論如何...這裏有一些選擇:

QPalette解決方案

menu = QMenu(self) 
palette = menu.palette() 
palette.setColor(menu.backgroundRole(), QColor('#242424')) 
menu.setPalette(palette) 

樣式表解決方案

http://doc.qt.nokia.com/4.7-snapshot/stylesheet-examples.html#customizing-qmenu

我複製高級定製一個和調整所有的值,而不是真正刪除任何人,因爲其所有的紙牌做的房子。

+0

啊,很酷,我不知道你可以在樣式表中使用調色板標記。是的,我的樣式表非常廣泛。我發現使用樣式表來設置樣式,如懸停,切換,選擇等等更容易,我可以將樣式表從應用程序傳輸到應用程序以獲得一致的外觀。但我認爲,因爲樣式表系統更新,它仍然有一些錯誤需要解決。就像這個問題一樣,我仍然沒有找到解決方法,另外一個問題是禁用的小部件不尊重樣式表中的字體屬性,但至少這是一個已知問題。 – 2012-08-27 20:39:27