QMenu添加QAction的时候怎么去掉text

clz2012 2019-08-22 11:55:03
我有一组QAction,设置了text和icon,在菜单栏显示,这个没问题,icon显示在text前面
现在我想把这组QAction显示在工具栏上,通过QToolbutton的setMenu也可以,但是
我想要的效果是弹出的Menu下的action不显示文本内容,只显示图标,请问这个怎么搞呢
...全文
960 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinjay 2019-09-19
  • 打赏
  • 举报
回复
嗯 定义两组action吧
dinjay 2019-09-18
  • 打赏
  • 举报
回复
引用 6 楼 clz2012 的回复:
[quote=引用 5 楼 dinjay 的回复:]
[quote=引用 3 楼 clz2012 的回复:]
[quote=引用 1 楼 dinjay 的回复:]
使用QWidgetAction,继承QWidgetAction重写createWidget函数,返回值是一个qwidget,也就是显示的action内容,你可以只设置一个label,label里是图片。

继承QWidgetAction确实是可以只显示图片,不过这样的QWidgetAction在哪里实例化都是只显示图像,我想要的是同一个Action,在菜单上显示文字描述,但是在toolbutton的menu下只显示图标[/quote]

没太明白你的意思,action不是添加到menu下么,你点menu后弹出下拉菜单,此时菜单中显示的对应action,这个action你使用QWidgetAction,然后点击menu下拉的事件中控制一下对应QWidgetAction显示什么内容就行了,下拉menu选择对应action后,此时你再设置一下选中的action显示图片或者文字就行了。[/quote]

直接上代码吧
QMenu* menu1 = ui->menubar()->addMenu("1");
MyWidgetAction * myAction = new MyWidgetAction();
myAction->setIPixmap(xxx);
menu1->addAction(myAction); 这样我在点击1菜单弹出的下拉列表里,只会显示createWidget返回的widget,我想要在系统菜单的二级菜单下显示icon+text的默认形式,但是在如下代码:
QtoolButton * pButton = new QtoolButton
pButton->setMenu(menu2);
menu2->addAction(myAction);
点击toolbutton的时候只显示图标
[/quote]

你这里对myAction只设置了icon,没有text,当然只会显示icon了....
clz2012 2019-09-18
  • 打赏
  • 举报
回复
引用 11 楼 dinjay 的回复:
[quote=引用 10 楼 clz2012 的回复:]
[quote=引用 9 楼 dinjay 的回复:]
不是这样用,我意思是说,你继承QWidgetAction,然后createWidget里创建一个布局,布局里是两个label水平排布,label1显示icon,右边的label2显示text文字,然后你创建这个widgetaction,根据需要来控制label1显示还是label2显示,这样不就行了吗

你还是没明白我的意思, 我的意思就是同一个action, 在menubar下的子menu下通过addaction 显示icon+text,但是在toolbutton里通过对已经addAction的menu进行setMenu 只显示icon , 我可以实现widgetaction里自定义布局然后控制label以及icon显示隐藏,但是问题是我要的效果是,在弹出菜单的时候就要显示那样的效果,而不是说触发了action之后再改变显示。 你得意识是不是我再menubar下的某个menu点击的时候临时改变widgetaction的显示? 重写mouseClickedEvent事件吗?[/quote]

是的[/quote]
好吧,是个思路,不过改起来有点费事,干脆直接定义两组action然后绑定trigger事件吧,应该没有好的便捷方法了
dinjay 2019-09-18
  • 打赏
  • 举报
回复
引用 10 楼 clz2012 的回复:
[quote=引用 9 楼 dinjay 的回复:]
不是这样用,我意思是说,你继承QWidgetAction,然后createWidget里创建一个布局,布局里是两个label水平排布,label1显示icon,右边的label2显示text文字,然后你创建这个widgetaction,根据需要来控制label1显示还是label2显示,这样不就行了吗

你还是没明白我的意思, 我的意思就是同一个action, 在menubar下的子menu下通过addaction 显示icon+text,但是在toolbutton里通过对已经addAction的menu进行setMenu 只显示icon , 我可以实现widgetaction里自定义布局然后控制label以及icon显示隐藏,但是问题是我要的效果是,在弹出菜单的时候就要显示那样的效果,而不是说触发了action之后再改变显示。 你得意识是不是我再menubar下的某个menu点击的时候临时改变widgetaction的显示? 重写mouseClickedEvent事件吗?[/quote]

是的
clz2012 2019-09-18
  • 打赏
  • 举报
回复
引用 9 楼 dinjay 的回复:
不是这样用,我意思是说,你继承QWidgetAction,然后createWidget里创建一个布局,布局里是两个label水平排布,label1显示icon,右边的label2显示text文字,然后你创建这个widgetaction,根据需要来控制label1显示还是label2显示,这样不就行了吗

你还是没明白我的意思, 我的意思就是同一个action, 在menubar下的子menu下通过addaction 显示icon+text,但是在toolbutton里通过对已经addAction的menu进行setMenu 只显示icon , 我可以实现widgetaction里自定义布局然后控制label以及icon显示隐藏,但是问题是我要的效果是,在弹出菜单的时候就要显示那样的效果,而不是说触发了action之后再改变显示。 你得意识是不是我再menubar下的某个menu点击的时候临时改变widgetaction的显示? 重写mouseClickedEvent事件吗?
dinjay 2019-09-18
  • 打赏
  • 举报
回复
不是这样用,我意思是说,你继承QWidgetAction,然后createWidget里创建一个布局,布局里是两个label水平排布,label1显示icon,右边的label2显示text文字,然后你创建这个widgetaction,根据需要来控制label1显示还是label2显示,这样不就行了吗
clz2012 2019-09-18
  • 打赏
  • 举报
回复
引用 7 楼 dinjay 的回复:
[quote=引用 6 楼 clz2012 的回复:]
[quote=引用 5 楼 dinjay 的回复:]
[quote=引用 3 楼 clz2012 的回复:]
[quote=引用 1 楼 dinjay 的回复:]
使用QWidgetAction,继承QWidgetAction重写createWidget函数,返回值是一个qwidget,也就是显示的action内容,你可以只设置一个label,label里是图片。

继承QWidgetAction确实是可以只显示图片,不过这样的QWidgetAction在哪里实例化都是只显示图像,我想要的是同一个Action,在菜单上显示文字描述,但是在toolbutton的menu下只显示图标[/quote]

没太明白你的意思,action不是添加到menu下么,你点menu后弹出下拉菜单,此时菜单中显示的对应action,这个action你使用QWidgetAction,然后点击menu下拉的事件中控制一下对应QWidgetAction显示什么内容就行了,下拉menu选择对应action后,此时你再设置一下选中的action显示图片或者文字就行了。[/quote]

直接上代码吧
QMenu* menu1 = ui->menubar()->addMenu("1");
MyWidgetAction * myAction = new MyWidgetAction();
myAction->setIPixmap(xxx);
menu1->addAction(myAction); 这样我在点击1菜单弹出的下拉列表里,只会显示createWidget返回的widget,我想要在系统菜单的二级菜单下显示icon+text的默认形式,但是在如下代码:
QtoolButton * pButton = new QtoolButton
pButton->setMenu(menu2);
menu2->addAction(myAction);
点击toolbutton的时候只显示图标
[/quote]

你这里对myAction只设置了icon,没有text,当然只会显示icon了....[/quote]
设置text没用
dinjay 2019-09-17
  • 打赏
  • 举报
回复
引用 3 楼 clz2012 的回复:
[quote=引用 1 楼 dinjay 的回复:]
使用QWidgetAction,继承QWidgetAction重写createWidget函数,返回值是一个qwidget,也就是显示的action内容,你可以只设置一个label,label里是图片。

继承QWidgetAction确实是可以只显示图片,不过这样的QWidgetAction在哪里实例化都是只显示图像,我想要的是同一个Action,在菜单上显示文字描述,但是在toolbutton的menu下只显示图标[/quote]

没太明白你的意思,action不是添加到menu下么,你点menu后弹出下拉菜单,此时菜单中显示的对应action,这个action你使用QWidgetAction,然后点击menu下拉的事件中控制一下对应QWidgetAction显示什么内容就行了,下拉menu选择对应action后,此时你再设置一下选中的action显示图片或者文字就行了。
clz2012 2019-09-17
  • 打赏
  • 举报
回复
引用 5 楼 dinjay 的回复:
[quote=引用 3 楼 clz2012 的回复:]
[quote=引用 1 楼 dinjay 的回复:]
使用QWidgetAction,继承QWidgetAction重写createWidget函数,返回值是一个qwidget,也就是显示的action内容,你可以只设置一个label,label里是图片。

继承QWidgetAction确实是可以只显示图片,不过这样的QWidgetAction在哪里实例化都是只显示图像,我想要的是同一个Action,在菜单上显示文字描述,但是在toolbutton的menu下只显示图标[/quote]

没太明白你的意思,action不是添加到menu下么,你点menu后弹出下拉菜单,此时菜单中显示的对应action,这个action你使用QWidgetAction,然后点击menu下拉的事件中控制一下对应QWidgetAction显示什么内容就行了,下拉menu选择对应action后,此时你再设置一下选中的action显示图片或者文字就行了。[/quote]

直接上代码吧
QMenu* menu1 = ui->menubar()->addMenu("1");
MyWidgetAction * myAction = new MyWidgetAction();
myAction->setIPixmap(xxx);
menu1->addAction(myAction); 这样我在点击1菜单弹出的下拉列表里,只会显示createWidget返回的widget,我想要在系统菜单的二级菜单下显示icon+text的默认形式,但是在如下代码:
QtoolButton * pButton = new QtoolButton
pButton->setMenu(menu2);
menu2->addAction(myAction);
点击toolbutton的时候只显示图标
clz2012 2019-09-16
  • 打赏
  • 举报
回复
引用 2 楼 天 月 的回复:
设计界面点工具栏位置,设置工具栏属性 toolButtonStyle 为toolButtonIconOnly即可

这个方法只能toolbutton本身不显示文本,通过setMenu弹出的子菜单下的Action一样显示文本
clz2012 2019-09-16
  • 打赏
  • 举报
回复
引用 1 楼 dinjay 的回复:
使用QWidgetAction,继承QWidgetAction重写createWidget函数,返回值是一个qwidget,也就是显示的action内容,你可以只设置一个label,label里是图片。

继承QWidgetAction确实是可以只显示图片,不过这样的QWidgetAction在哪里实例化都是只显示图像,我想要的是同一个Action,在菜单上显示文字描述,但是在toolbutton的menu下只显示图标
天 月 2019-09-15
  • 打赏
  • 举报
回复
设计界面点工具栏位置,设置工具栏属性 toolButtonStyle 为toolButtonIconOnly即可
dinjay 2019-09-12
  • 打赏
  • 举报
回复
使用QWidgetAction,继承QWidgetAction重写createWidget函数,返回值是一个qwidget,也就是显示的action内容,你可以只设置一个label,label里是图片。

16,235

社区成员

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

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