读书人

Qt 设置菜单过长时向下滚动

发布时间: 2012-09-19 13:43:54 作者: rapoo

Qt 设置菜单过长时向上滚动

Qt 在Mac os 下 当菜单过长时会自动折叠(额,不知道怎么描述),如下图的这种情况

Qt 设置菜单过长时向下滚动

上图是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/

读书人网 >其他相关

热点推荐