Qt QMenu 设置action icon大小

 

 今天做了一个需求,本来以为很简单,结果用了两三个小时才搞定,google和百度了好多答案都不实用,最后自己解决了,记录分享一下解决办法。

需求是这样的:一个菜单栏,插入的action是图片加文字,qt的action是支持这种格式的,问题是action的icon大小无法控制,网上找到的答案,都是只能改变icon的宽度,无法改变高度。

#include <QCommonStyle>
// 自定义一个style类,通过setStyle设置给menu,以此设置iconsize
class CustomIconStyle : public QCommonStyle
{
    Q_OBJECT

public:
    CustomIconStyle(int size)
        : QCommonStyle(), size_(size) {}

protected:
    int CustomIconStyle::pixelMetric(PixelMetric metric, const QStyleOption * option, const QWidget * widget) const  override
    {

        if (metric == QStyle::PM_SmallIconSize) {
            return size_;
        }

        return QCommonStyle::pixelMetric(metric, option, widget);

    }

private:
    int size_;
};

 很疑惑 iconsize返回的是一个,按道理size是长和宽,写代码测试了一下,如果是在代码中增加icon,这个action的高度跟PM_SmallIconSize一致,如果是在样式表中添加icon,高度不会变化。

 // style的使用方法举例,menu->setStyle(new CustomIconStyle(30));  (注意内存泄漏)

 因为代码是用样式表来添加icon 的,所以继续查找解决办法。下面是最后用的解决办法


 action_ = new QPushButton(menu);
 QWidgetAction* action = new QWidgetAction(this);
 action->setDefaultWidget(action_ );
 menu->addAction(action);

用QWidgetAction来用当做菜单的小控件,它自带的setDefaultWidget函数可以方便的设置复杂的样式。

 

  • 3
    点赞
  • 12
    收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 5

打赏作者

JackMaaaaaaa

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值