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

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

 

 

 

 

 

 

 

上图是vs2008 的项目属性菜单


在windows 下 要实现这中效果,需要重写 QWindowsStyle

MenuStyle.H

#ifndef IRAN_SCROLLMENUSTYLE_H
#define IRAN_SCROLLMENUSTYLE_H

#include
#include

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设置样式就可以了。


 

你可能感兴趣的:(qt,代码,c++,qt,windows,menu,百度,测试)