2014-09-25 47 views
0

我試圖更改QMenu上標籤/文本的樣式和/或字體,而不會影響它的子級。我在Python中使用PySide(它的工作原理與Qt一樣)。在不影響子級的情況下製作QMenu標籤

我已經試過:

menu = QtGui.QMenu() 
f = menu.font() 
f.setBold(True) 
menu.setFont(f) 

而且

menu = QtGui.QMenu() 
menu.setStyleSheet("QMenu{font-weight: bold;}") 

這些都不會改變菜單本身的標籤,但會做所有的孩子。

我寧願直接在QMenu上設置樣式(或者其他類,如果它的行爲類似並且可行),而不是在其父類上應用樣式表。

目標

的想法是,我有各種各樣的子菜單(其中有些動態的基於服務器上的文件夾),其中一些需要大膽地將一些斜體的菜單。因此,我想動態添加這些子QMenu並相應地設置它們。

+1

目前尚不清楚,目前正在很好地爲您的樣式表代碼,但要達到所需的效果沒有樣式表? – 2014-09-25 08:59:01

+0

之後你用'menu'對象做什麼? menu.exec還是什麼?你把它放在哪裏?你想在哪裏看到粗體文字? – Ezee 2014-09-25 09:29:53

+0

@ N1ghtLight:如前所述,使用setStyleSheet結果與調整字體的結果相同。兩者都不是我想要的。 – 2014-09-25 09:34:25

回答

4

您可以輕鬆實現。要理解其中的邏輯:

  • QMenu - 是當你添加QMenu另一個QMenuQMenu::menuAction被放置在一個基地菜單,顯示項目
  • 一個小部件。
  • 如果您想要自定義子菜單添加到基本菜單時的外觀,您需要自定義menuAction

因此,要讓菜單粗體,只需將粗體字體設置爲menuAction即可。

下面是一個簡單的工作示例:

QMenu m; //base menu 
QMenu sub; //sub menu 
sub.setTitle("subMenu"); 

QAction* a1 = new QAction("act1", &m); 
QAction* a2 = new QAction("act2", &m); 
QAction* a3 = new QAction("act3", &m); 

// set a bold font for a sub menu item 
QFont f = sub.menuAction()->font(); 
f.setBold(true);  
sub.menuAction()->setFont(f); 

// add an action to the sub menu 
sub.addAction(a3); 

// add two actions and the sub menu to the base menu 
m.addAction(a1); 
m.addMenu(&sub); 
m.addAction(a2); 

// show the base menu 
m.exec(QCursor::pos()); 
+0

謝謝。這工作完美。 – 2014-09-25 10:24:05

+0

不客氣。 – Ezee 2014-09-25 10:25:11

0

閱讀關於QSS selectors的Qt文檔。

對於您的情況:您無法直接自定義特定菜單項的標籤。但是你可以插入QWidgetAction insend QAction並根據需要自定義它(在QWidgetAction上放置一個標籤並對其進行自定義)。

+0

QWidgetAction是否可以像普通「子菜單'持有孩子QMenuItem和QMenu? – 2014-09-25 09:39:44

+1

是的,一切都取決於你如何自定義內部小部件。 – 2014-09-25 09:58:37

+1

您不會得到確切的行爲,但您可以花費大量精力接近它。 – Ezee 2014-09-25 10:04:23

相關問題