云南网站建设天软科技,附近找工作招聘信息,用discuz好还是WordPress好,wordpress分类目录seo标题项目中#xff0c;使用QMenu#xff0c;多个QAction时 超出页面范围#xff0c;需要菜单栏可以上下滚动。
实际QMenu是带滚动的#xff0c;但是要知道怎么使用 还是需要查看QT源码#xff0c;现在简单记录下我的使用方法。
QT源码中#xff1a;q-style()-style…项目中使用QMenu多个QAction时 超出页面范围需要菜单栏可以上下滚动。
实际QMenu是带滚动的但是要知道怎么使用 还是需要查看QT源码现在简单记录下我的使用方法。
QT源码中q-style()-styleHint(QStyle::SH_Menu_Scrollable, 0, q) 是支持滚动样式的需要配置
void QMenuPrivate::init()
{QMenu * const q q_func();Q_Q(QMenu);
#ifndef QT_NO_WHATSTHISq-setAttribute(Qt::WA_CustomWhatsThis);
#endifq-setAttribute(Qt::WA_X11NetWmWindowTypePopupMenu);defaultMenuAction menuAction new QAction(q);menuAction-d_func()-menu q;QObject::connect(menuAction, QAction::changed, [] {if (!tornPopup.isNull())tornPopup-updateWindowTitle();});q-setMouseTracking(q-style()-styleHint(QStyle::SH_Menu_MouseTracking, 0, q));if (q-style()-styleHint(QStyle::SH_Menu_Scrollable, 0, q)) {scroll new QMenuPrivate::QMenuScroller;scroll-scrollFlags QMenuPrivate::QMenuScroller::ScrollNone;}sloppyState.initialize(q);delayState.initialize(q);mousePopupDelay q-style()-styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, q);
}配置方法代码
//跟进源码发现styleHint()是虚函数需要自定义
#include QtWidgets
#include QStyle
class UProxyStyle:public QProxyStyle{ Q_OBJECT
int styleHint(StyleHint h, const QStyleOption *op Q_NULLPTR,const QWidget *w Q_NULLPTR, QStyleHintReturn *rd Q_NULLPTR) const{printf(UMenu::styleHint %d\n,h);switch(h){ //以下设置的效果见图13-12的讲解case QStyle::SH_ScrollBar_LeftClickAbsolutePosition: return true;case QStyle::SH_ScrollBar_MiddleClickAbsolutePosition:return true;case QStyle::SH_ScrollBar_ScrollWhenPointerLeavesControl: return false; case QStyle::SH_Menu_Scrollable: return true;/*这一句是关键返回true表明支持*/ }return QProxyStyle::styleHint(h,op,w); }
};//实际QMenu的使用QMenu* m_viewMenu new QMenu();int i 0;for(i 0; i 20; i){QAction* m_Action1 new QAction(QStringLiteral(测试)i, m_viewMenu);m_viewMenu-addAction(m_Action1);}// 启用滚动菜单的样式提示m_viewMenu-setStyle(new UProxyStyle());
实际使用不麻烦可惜我最开始没看源码盲人摸象 耽误了很多时间还是源码最靠谱
QStyle 还有更多样式可以查查相关文章