我有一个MY_VAR
,例如两个QMenuBar
项。
例如,我怎样才能将“Floors”项目设为蓝色?我知道如何更改所有项目:
QMenu
但是我找不到给特定项目上色的方法。我尝试在QMenuBar::item {
background: ...;
}
上使用setProperty
,我尝试Qmenu
,...我发现什么都没有用。有没有办法在C ++代码中设置特定的setPalette
属性?
答案 0 :(得分:1)
我终于找到了一些东西。
创建您自己的对象,例如WidgetMenuBar
,继承自QMenuBar
。
添加一个属性以识别应该以不同方式着色的项目:
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);
重新实现您的小部件的void paintEvent(QPaintEvent *e)
功能:
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);
}
}
您可以看到here如何实现paintEvent函数。