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

本文介绍如何在 Qt 应用程序中实现类似 MacOS 的自动滚动菜单效果。通过重写 QWindowsStyle,自定义 ScrollingMenuStyle 类来支持菜单滚动,并调整菜单滚动条的高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值