如何将 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 切换
QT:QActionGroup加入QMenu后,谁是QActionGroup成员的父母?
QAction QActionGroup QMenu 使用方法
Qt 5.4 OS X 如何在 QMenu 和 QToolBar 中使用 QAction,但仅在 QToolbar 中显示图标