如何使用样式表(css)更改QAction背景颜色?

Mel*_*oun 3 css qt pyqt

我的 QToolBar 中有一些 QActions。QAction 没有任何样式表,因此我尝试使用 QToolBar 样式表来更改 QAction 背景颜色。它适用于 QToolBar 中的每个 QAction

QToolButton{ background: red; }
Run Code Online (Sandbox Code Playgroud)

但我需要将一些 QAction 背景更改为红色,一些更改为绿色。

我尝试过仅更改一个 QAction

QToolButton:nth-of-type(3){ background: red; }
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

知道如何仅更改某些 QAction 的背景吗?

Rei*_*ica 5

您可以在 CSS 中使用 id 选择器,它们将选择对象名称。为此,您需要将操作对象名称传输到工具栏中使用的小部件。为了方便按名称引用操作和小部件,也应该为操作指定一个名称。

在此输入图像描述

// https://github.com/KubaO/stackoverflown/tree/master/questions/action-style-32460193
#include <QtWidgets>

void nameAction(QToolBar * bar, QAction * action, const char * name = nullptr) {
   if (name && action->objectName().isEmpty())
      action->setObjectName(name);
   bar->widgetForAction(action)->setObjectName(action->objectName());
}

int main(int argc, char ** argv) {
   QApplication app{argc, argv};
   QToolBar tb;
   nameAction(&tb, tb.addAction("Foo"), "foo");
   nameAction(&tb, tb.addAction("Bar"), "bar");
   nameAction(&tb, tb.addAction("Baz"), "baz");
   tb.setStyleSheet(
            "QToolButton#foo { background:red }"
            "QToolButton#baz { background:blue }");
   tb.show();
   return app.exec();
}
Run Code Online (Sandbox Code Playgroud)