首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

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

2012-09-19 
Qt 设置菜单过长时向上滚动Qt在Mac os 下 当菜单过长时会自动折叠(额,不知道怎么描述),如下图的这种情况上

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/

 

热点排行