Qt 设置菜单过长时向上滚动
Qt 在Mac os 下 当菜单过长时会自动折叠(额,不知道怎么描述),如下图的这种情况
上图是vs2008 的项目属性菜单
而在windows 下没有这种效果。 而如果在项目中遇到 动态生成的菜单中有 上百个 QAction的时候,情况就显得糟糕了。测试的人给你提单,项目组长催你,SE 催你,项目经理催你。。可你不会!!! 这可咋办,无奈,百度了N天,终于在qt的 官方论坛发现了这个。。
分享给大家:
在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设置样式就可以了。
http://www.openwebnote.com/qt-settings-menu-too-long-to-scroll/