Qaction设置icon.

AlicizationZero 2020-06-01 10:34:07
列如QT动作编辑器中配置动作编辑器带有子动作的倒三角Qmenu,但其icon大小和其他普通qaction的icon一样。请问如何设置这样的。
...全文
2502 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
百里杨 2020-06-01
  • 打赏
  • 举报
回复
你想实现级联菜单?act2应该用QMenu类型,下面接QAction
AlicizationZero 2020-06-01
  • 打赏
  • 举报
回复
你好,我是一个QMenu先添加两个qaction,再将qmenu用setMenu()添加到另外的qaction。但菜单栏实际显示的是icon+倒三角menu图标,这个倒三角并不是我添加的icon,而是自动生成的。

QAction* act1 = new QAction(QIcon("./Icon/joy.png"), QString::fromLocal8Bit("动作1"));
QAction* act2 = new QAction(QIcon("./Icon/device.png"), QString::fromLocal8Bit("动作2"));
QMenu* menu = new QMenu(this);
QAction* subAct1 = new QAction(QString::fromLocal8Bit("子动作1"));
QAction* subAct2 = new QAction(QString::fromLocal8Bit("子动作2"));
menu->addAction(subAct1);
menu->addAction(subAct2);
act2->setMenu(menu);
ui.mainToolBar->addAction(act1);
ui.mainToolBar->addAction(act2);

请问如何才能像QT设计师中动作编辑器的 配置动作编辑器 一样倒三角添加在icon里。
感谢大佬回答与帮助,非常感谢!
百里杨 2020-06-01
  • 打赏
  • 举报
回复
图标是固定大小,可以设置button大小,如下:
toolButton->setFixedSize(toolButton->iconSize().width() + 20, toolButton->iconSize().height() + 10);
不知,是否符合你的要求
百里杨 2020-06-01
  • 打赏
  • 举报
回复
    QToolButton *toolButton = new QToolButton(this);
    toolButton->setIcon( QApplication::style()->standardIcon(QStyle::SP_ComputerIcon) );
    toolButton->setToolButtonStyle( Qt::ToolButtonTextUnderIcon);
    toolButton->setPopupMode(QToolButton::InstantPopup);

    QMenu *menu = new QMenu();
    menu->addAction(QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical), tr("图标视图"));
    menu->addAction(QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion), tr("细节视图"));

    toolButton->setMenu(menu);
scribbler 2020-06-01
  • 打赏
  • 举报
回复
你可以叫美工将工具图标和倒三角图标弄成一个整体。根据不同状态替换成不同的图标
AlicizationZero 2020-06-01
  • 打赏
  • 举报
回复
我需要的正是3楼所显示的这种图标,感谢各位的解答!
mideum 2020-06-01
  • 打赏
  • 举报
回复
想把倒三角添加在icon里只能在QToolButton里面设置(其实也不是icon里,就是按钮里)
也就是楼上所写的
toolButton->setPopupMode(QToolButton::InstantPopup);

如果你一定要在QToolBar里面使用
一个方法是获取action相对的widget后cast成QToolButton进行设置

if(QToolButton* button = qobject_cast<QToolButton*>(ui.mainToolBar->widgetForAction(act2)))
button->setPopupMode(QToolButton::InstantPopup);

不过这个方法适用于QToolBar的布局不大变化的情况下,否则布局变化又重新new了新的按钮,之前的设置就失效了

还有一个办法是直接往QToolBar添加QToolButton

QToolButton* toolButton = new QToolButton(ui.mainToolBar);
toolButton->setIcon(QIcon("./Icon/device.png"));
toolButton->setText(QString::fromLocal8Bit("动作2"));
toolButton->setMenu(menu);
toolButton->setPopupMode(QToolButton::InstantPopup);
ui.mainToolBar->addWidget(toolButton);

这个办法要注意的地方文档里有说:
If you add a QToolButton with this method, the toolbar's Qt::ToolButtonStyle will not be respected.
就是这个按钮的toolButtonStyle就不跟着工具栏的设置走了

不过这样的倒三角跟动作编辑器里的颜色和位置还是不一样的,不知道你能否接受

21,495

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧