介绍:可通过QWidgetAction,给QToolButton设置Action达到目的,无需专门去自定义一个控件,在使用时注意给QToolButton设置setToolButtonStyle(Qt::ToolButtonTextBesideIcon)和setPopupMode(QToolButton::InstantPopup)两个属性。
FS_Popup_Widget.h
#pragma once
#include <QToolButton>
#include <QWidgetAction>
#include <QPointer>
class QMenu;
class FS_PopupWidget : public QToolButton
{
Q_OBJECT
public:
FS_PopupWidget(QWidget *parent = Q_NULLPTR);
~FS_PopupWidget();
private:
QPointer<QWidgetAction> m_popup_widget;
QPointer<QMenu> m_menu;
};
FS_Popup_Widget.cpp
#include "FS_PopupWidget.h"
#include <QMenu>
#include <QListWidget>
#include <QListWidgetItem>
#include <QHBoxLayout>
#include <QVBoxLayout>
#pragma execution_character_set("utf-8")
FS_PopupWidget::FS_PopupWidget(QWidget *parent)
: QToolButton(parent)
{
// set ToolButton attribute
this->setPopupMode(QToolButton::InstantPopup);
this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
this->setIcon(QIcon(":/images/error.png"));
this->setText("弹出");
m_popup_widget = new QWidgetAction(this);
m_menu = new QMenu(this);
QPointer<QListWidget> lwd = new QListWidget;
lwd->setMinimumSize(QSize(400, 400));
lwd->setViewMode(QListView::IconMode);
lwd->setIconSize(QSize(80, 80));
for (int i = 0; i < 10; i++)
{
QListWidgetItem* item = new QListWidgetItem(QIcon(":/images/warning.png"), "Test");
lwd->addItem(item);
}
QPointer<QVBoxLayout> layout_main = new QVBoxLayout;
layout_main->addWidget(lwd);
QPointer<QWidget> default_widget = new QWidget;
default_widget->setLayout(layout_main);
m_popup_widget->setDefaultWidget(default_widget);
m_menu->addAction(m_popup_widget);
this->setMenu(m_menu);
}
FS_PopupWidget::~FS_PopupWidget()
{
}