QMenu自定义icon大小
QMenu默认的icon最大是16px*16px,而且通过stylesheet还改不了。
问题症结:QMenu 使用 QProxyStyle 里面的QStyle::PM_SmallIconSize
解决办法: 1.定义一个新的Style继承自QProxyStyle 替换掉QStyle::PM_SmallIconSize
头文件:
#include <QProxyStyle>
class CustomIconStyle : public QProxyStyle
{
Q_OBJECT
public:
CustomIconStyle();
~CustomIconStyle();
void SetCustomSize(int);
protected:
virtual int pixelMetric(PixelMetric metric, const QStyleOption * option, const QWidget * widget) const;
private:
int mSize;
};
#endif // CUSTOMICONSTYLE_H
源文件:
#include "customiconstyle.h"
CustomIconStyle::CustomIconStyle()
{
mSize = 30;
}
CustomIconStyle::~CustomIconStyle()
{
}
void CustomIconStyle::SetCustomSize( int nSize )
{
mSize = nSize;
}
int CustomIconStyle::pixelMetric( PixelMetric metric, const QStyleOption * option, const QWidget * widget ) const
{
int s = QCommonStyle::pixelMetric(metric, option, widget);
if (metric == QStyle::PM_SmallIconSize) {
s = mSize;
}
return s;
}
使用时:
CustomIconStyle* pStyle = new CustomIconStyle;
m_logoMenu->setStyle(pStyle);
m_logoMenu->setStyleSheet(
实测这样不会覆盖Stylesheet中的样式(hover效果)。在QT5下若直接继承QCommonStyle可能发生Menu打开一片空白,或者无hover效果。