昨天项目中遇到一个问题,就是弹出QMenu时,item上的icon太小,而且通过stylesheet还改不了,原来QMenu默认的icon最大是16px*16px。后来google了一下,在QtCenter.org找到解决方案---看这里
帖子很简单,大家都应该能看懂,这里主要是记一下,以免忘记。
问题症结:QMenu 使用 QPlastiqueStyle 里面默认使用QStyle::PM_SmallIconSize
解决办法: 定义一个新的Style继承自QPlastiqueStyle 替换掉QStyle::PM_SmallIconSize
示例Code:
然后
这样就行了,轻松加愉快!
ps: 如何知道默认使用的Style, 可以调用对象的metaObject()->className() 方法 我还没试过
上代码:
///////////////////////////////////////////////////////////
// QMenu的大图标定义
///////////////////////////////////////////////////////////
#ifndef CUSTOMICONSTYLE_H
#define CUSTOMICONSTYLE_H
#include
class CustomIconStyle : public QCommonStyle
{
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 = 20;
}
CustomIconStyle::~CustomIconStyle()
{
}
void CustomIconStyle::SetCustomSize( int nSize )
{
mSize = nSize;
}
int CustomIconStyle::pixelMetrichttp://www.yingtaow.com/sitemap.xml?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;
mpMikeMenu->setStyle(pStyle);