2017-01-22 15 views
0

私はQMenuBarを持っています。例えば、2つのQMenuという項目があります。私は「床」の項目には、例えば、青に作ることができますどのようにQtスタイルシート:特定のQMenuBar :: item背景色を設定してください

enter image description here

QMenuBar::item { 
    background: ...; 
} 

しかし、特定のアイテムに色を付ける方法が見つかりません。私はにsetPropertyを使用しようとしましたが、私はsetPaletteで試しました。 C++コードで特定のQMenuBar::itemプロパティを設定する方法はありますか?

答えて

0

私はついに何かを見つけました。

  1. 独自のオブジェクトを作成し、たとえばWidgetMenuBarため、QMenuBarから継承されました。

  2. ウィッヒ項目は異なる色に着色されなければならない識別するためのプロパティを追加します。

    for (int i = 0; i < this->actions().size(); i++){ 
        actions().at(i)->setProperty("selection",false); 
    } 
    // Only the first item colored 
    actions().at(0)->setProperty("selection",true); 
    
  3. 再実装void paintEvent(QPaintEvent *e)ウィジェットの機能:あなたはpaintEventを実装するhereどのように見ることができます

    void WidgetMenuBarMapEditor::paintEvent(QPaintEvent *e){ 
        QPainter p(this); 
        QRegion emptyArea(rect()); 
    
        // Draw the items 
        for (int i = 0; i < actions().size(); ++i) { 
         QAction *action = actions().at(i); 
         QRect adjustedActionRect = this->actionGeometry(action); 
    
         // Fill by the magic color the selected item 
         if (action->property("selection") == true) 
          p.fillRect(adjustedActionRect, QColor(255,0,0)); 
    
         // Draw all the other stuff (text, special background..) 
         if (adjustedActionRect.isEmpty() || !action->isVisible()) 
          continue; 
         if(!e->rect().intersects(adjustedActionRect)) 
          continue; 
         emptyArea -= adjustedActionRect; 
         QStyleOptionMenuItem opt; 
         initStyleOption(&opt, action); 
         opt.rect = adjustedActionRect; 
         style()->drawControl(QStyle::CE_MenuBarItem, &opt, &p, this); 
        } 
    } 
    

を関数。

関連する問題