Qt 在Mac os 下 当菜单过长时会自动折叠(额,不知道怎么描述),如下图的这种情况
上图是vs2008 的项目属性菜单
在windows 下 要实现这中效果,需要重写 QWindowsStyle
MenuStyle.H
#ifndef IRAN_SCROLLMENUSTYLE_H
#define IRAN_SCROLLMENUSTYLE_H
#include <QWindowsStyle>
#include <QMacStyle>
class ScrollingMenuStyle : public QWindowsStyle
{
Q_OBJECT
public:
ScrollingMenuStyle();
int styleHint(StyleHint hint,
const QStyleOption *option = 0,
const QWidget *widget = 0,
QStyleHintReturn *returnData = 0) const;
int pixelMetric ( PixelMetric pm,
const QStyleOption * opt = 0,
const QWidget * widget = 0 ) const;
};
#endif
MenuStyle.CPP
#include "ScrollMenuStyle.h"
ScrollingMenuStyle::ScrollingMenuStyle()
:QWindowsStyle()
{
}
int ScrollingMenuStyle::styleHint( StyleHint hint,
const QStyleOption *option /*= 0*/,
const QWidget *widget /*= 0*/,
QStyleHintReturn *returnData /*= 0*/ ) const
{
if (hint == QStyle::SH_Menu_Scrollable)//设置可以滚动
{
return 1;
}
else
{
return QWindowsStyle::styleHint(hint, option,widget, returnData);
}
}
int ScrollingMenuStyle::pixelMetric( PixelMetric pm,
const QStyleOption * opt /*= 0*/,
const QWidget * widget /*= 0 */ ) const
{
if (pm == QStyle::PM_MenuScrollerHeight)//设置那个小三角的高度
{
return 15;
}
else
{
return QWindowsStyle::pixelMetric(pm,opt,widget);
}
}
然后使用 setStyle设置样式就可以了。