效果
FS_PopupWidget.h
# ifndef FS_POPUPWIDGET_H
# define FS_POPUPWIDGET_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;
} ;
# endif
FS_PopupWidget.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)
{
this -> setPopupMode ( QToolButton:: InstantPopup) ;
this -> setToolButtonStyle ( Qt:: ToolButtonTextBesideIcon) ;
this -> setIcon ( QIcon ( ":/images/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/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 ( )
{
}
MainWindow.cpp
# include "mainwindow.h"
# include "ui_mainwindow.h"
# include "QHBoxLayout"
MainWindow :: MainWindow ( QWidget * parent)
: QMainWindow ( parent)
, ui ( new Ui:: MainWindow)
{
ui-> setupUi ( this ) ;
myFS_PopupWidget= new FS_PopupWidget ( ) ;
ui-> verticalLayout-> addWidget ( myFS_PopupWidget) ;
}
MainWindow :: ~ MainWindow ( )
{
delete ui;
}