当前位置: 首页 > 工具软件 > iconsize > 使用案例 >

Qt QMenu 设置action icon大小

丰景同
2023-12-01

 

 今天做了一个需求,本来以为很简单,结果用了两三个小时才搞定,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函数可以方便的设置复杂的样式。

 

 类似资料: