如何将 QMenu 中的 QAction 转换为 QWidget?

Posted

技术标签:

【中文标题】如何将 QMenu 中的 QAction 转换为 QWidget?【英文标题】:How to convert QAction inside a QMenu to QWidget? 【发布时间】:2018-04-27 00:49:49 【问题描述】:

我想使用 qss 文件设置 QAction 的图标。我无法将样式表设置为 QAction,因此我想将其转换为 QWidget,以便可以使用样式表将图标添加到 QMenu 的各个操作中。我知道如何在代码中执行此操作,因为我想使用 qss 添加 QActions 图标。

QMenu* menu = new QMenu();
QAction* newFile = new QAction;
newFile->setText("New File");
menu->addAction(newFile);

我想在 qss 中将图标设置为 QAction。

【问题讨论】:

QAction 不是小部件,因此无法使用 .qss 访问它,您应该使用 QMenu::item,但您不能单独访问菜单的每个元素。 使用重载QMenu::addAction(const QIcon &icon, const QString &text) 我知道我无法使用 .qss 访问 QAction,所以我想将其转换为 QWidget 以便我可以访问它的属性。在 QToolBar 它有 widgetForAction(QAction *action) const 我可以通过它访问 QAction 。所以我在 QMenu 中寻找类似的东西,通过它我可以访问 QAction 属性 正如 eyllanesc 所说,QAction 不是图形类,将其转换为 QWidget 是没有意义的。这是您想要的 QMenu。 @Rubina 不能,你不能单独访问菜单的每个元素 【参考方案1】:
QMenu *menu;
menu =new QMenu();

QToolButton *button=new QToolButton(menu);
button->setFixedSize(50,50);
QWidgetAction *action=new QWidgetAction(this);
action->setDefaultWidget(button);
menu->addAction(action);

使用 QToolButton 代替 QAction,您可以使用 setStyleSheet() 或 setIcon() 设置图标

【讨论】:

以上是关于如何将 QMenu 中的 QAction 转换为 QWidget?的主要内容,如果未能解决你的问题,请参考以下文章

QMenu mousePressEvent 阻碍了 QAction 切换

如何知道触发了哪个 QMenu 的动作

QT:QActionGroup加入QMenu后,谁是QActionGroup成员的父母?

QAction QActionGroup QMenu 使用方法

QMenu 中 QAction 的所有权

Qt 5.4 OS X 如何在 QMenu 和 QToolBar 中使用 QAction,但仅在 QToolbar 中显示图标