|
起因: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(); } } }
|