C++ QMenu:为特定QAction设置文本颜色

C++ QMenu:为特定QAction设置文本颜色,c++,qt4,C++,Qt4,我有一个QMenu作为上下文菜单,如下所示: Menu - information_A - information_B - information_C 现在我希望条目信息\u B以不同的颜色绘制。如何存档此文件?编辑:我在本文中找到了最佳解决方案: 在您的情况下,它将非常简单: QMenu contextMenu(this); QString menuStyle( "QMenu::item{" "color: rgb(0, 0, 255);"

我有一个
QMenu
作为上下文菜单,如下所示:

Menu
- information_A
- information_B
- information_C

现在我希望条目
信息\u B
以不同的颜色绘制。如何存档此文件?

编辑:我在本文中找到了最佳解决方案: 在您的情况下,它将非常简单:

QMenu contextMenu(this);
QString menuStyle(
        "QMenu::item{"      
        "color: rgb(0, 0, 255);"
        "}"
    );
contextMenu.setStyleSheet(menuStyle);
有关更多选项和可能性,请查看我在上面提供的链接中的答案

以前的解决方案:
您可以使用
QWidgetAction
而不是
QAction
,使用所需的文本和样式表定义
QLabel
,然后将其分配给
QWidgetAction
。但是请记住,您必须调整
QLabel
的宽度和高度,以使其看起来与
QAction
相同

示例代码:

// label
QLabel *text = new QLabel(QString("your text here"), this);
text->setStyleSheet("color: blue"); 
// init widget action
QWidgetAction *widAct= new QWidgetAction(this);
widAct->setDefaultWidget(text);
contextMenu.addAction(widAct);

如果您只希望设置菜单中单个项目的样式,则可以使用
QMenu::setDefaultAction
将其设置为默认,并使用
QMenu::item:default
选择器设置默认菜单项的样式

即:


这种方法的局限性在于它只能对一个项目应用特殊的样式。

很难说什么是不可能的,但是。。。我认为这是不可能的。至少以一种简单的方式。我可能忽略了一些事情,但我担心,您必须将QMenu子类化并自己绘制,即重载QPaintEvent。我检查了
QMenu
s绘画事件的源代码,它调用了各种隐藏成员。所以我猜当使用
LGPL
时,没有办法使用现有的功能?我不知道。我检查了可用的api,没有发现可以轻松解决问题的东西。正如我所说,您可能必须自己将QMenu子类化并重载QPaintEvent。这与LGPL无关。我只是不认为这个看起来简单的QMenu会出人意料地难以绘制。我想。。。有点晚,但我喜欢:)晚做比不做要好:)QWigetAction类型的动作不会触发信号,也不会调用插槽。
QMenu* menu = new QMenu("My menu");
QAction* actionToStyle = new QAction("My action");
menu->addAction(actionToStyle);
menu->setDefaultAction(actionToStyle);
menu->setStyleSheet("QMenu::item:default { color: #ff0000; }");