QMenu增加带滚动条的子菜单

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-22 18:13   106   0

起因:QMenu原生没有自带滚动条,之前是想用重绘一个悬浮框,里面用带滚动条的自定义控件达到目的,

后面通过取巧的方式。插入一个带QListWidge的QAction达到目的。

############################################################

调用

ListWidgetAction* mpActionList = new ListWidgetAction(QStringList(), this);

connect(mpActionList , &ListWidgetAction::sigSelectChange, this, &xxxxx::OnSelectChange);


QMenu* pMenu= new QMenu(tr("xxx"), this);
pMenu->addAction(mpActionList );

###########################################################

#ifndef _LISTWIDGETACTION_H_
#define _LISTWIDGETACTION_H_
#include <QStringList>
#include <QWidget>


class ListWidgetAction : public QWidgetAction
{
Q_OBJECT
public:
ListWidgetAction(const QStringList& lstMenu, QWidget* pParent = NULL);


void OnSelectChange();

signals:
void sigSelectChange(QString strText);

private:
QListWidget* mpListWidget;
};


#endif _LISTWIDGETACTION_H_

#########################################

#include "ListWidgetAction.h"


ListWidgetAction::ListWidgetAction(const QStringList& lstMenu, QWidget* pParent)
: QWidgetAction(pParent)
{
mpListWidget = new QListWidget(pParent);
mpListWidget->setObjectName("ListWidgetAction");
mpListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
for (int i = 0; i < lstMenu.size(); i++)
{
mpListWidget->addItem(lstMenu.at(i));
}
connect(mpListWidget, &QListWidget::itemSelectionChanged, this, &ListWidgetAction::OnSelectChange);


setDefaultWidget(mpListWidget);
}

void ListWidgetAction::OnSelectChange()
{
if (mpListWidget->selectedItems().count() > 0)
{
QString strText = mpListWidget->selectedItems().at(0)->text();
emit sigSelectChange(strText);
if (NULL != menu())
{
menu()->hide();
}
}
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP