效果
MainWindow.h
cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include"toollayout.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QAction *actionIpSet;
QAction *actionAuthorize;
ToolLayout *myToolLayout;
private slots:
void slot_action_triggered(QAction *action);
};
#endif // MAINWINDOW_H
MainWindow.cpp
cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QHBoxLayout"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
myToolLayout=new ToolLayout();
// 将 myToolLayout 添加到窗口的布局中
QHBoxLayout *qHbox=new QHBoxLayout();
qHbox->addWidget(myToolLayout);
qHbox->addWidget(ui->pushButton_4);
//初始化下拉菜单
QMenu* menu = new QMenu(this);
actionIpSet = new QAction("按钮1", this);
actionAuthorize = new QAction("按钮2", this);
menu->addAction(actionIpSet);
menu->addAction(actionAuthorize);
menu->addSeparator();
menu->setWindowFlags(menu->windowFlags() | Qt::FramelessWindowHint);
menu->setAttribute(Qt::WA_TranslucentBackground);
// menu->setStyleSheet(" QMenu {border-radius:5px;font-family:'Microsoft Yahei';font-size:14px;color:#fff;}"
// " QMenu::item {height:30px; width:100px;padding-left:20px;border: 1px solid none;}"
// "QMenu::item:selected {background-color:rgb(0,120,215);\
// padding-left:20px;border: 1px solid rgb(65,173,255);}");
ui->pushButton_4->setMenu(menu);
// 将水平布局设置为窗口的布局
centralWidget()->setLayout(qHbox);
connect(menu, &QMenu::triggered, this, &MainWindow::slot_action_triggered);
}
MainWindow::~MainWindow()
{
delete ui;
}
//.cpp
void MainWindow::slot_action_triggered(QAction *action)
{
if(action == actionIpSet)
{
// qDebug() << "点击下拉菜单按钮1";
}
else if(action == actionAuthorize)
{
// qDebug() << "点击下拉菜单按钮2222";
}
}
ToolLayout.h
cpp
#ifndef TOOLLAYOUT_H
#define TOOLLAYOUT_H
#include <QWidget>
#include"QAction"
#include"QMenu"
namespace Ui {
class ToolLayout;
}
class ToolLayout : public QWidget
{
Q_OBJECT
public:
explicit ToolLayout(QWidget *parent = nullptr);
~ToolLayout();
private:
Ui::ToolLayout *ui;
QAction *actionIpSet;
QAction *actionAuthorize;
private slots:
void slot_action_triggered(QAction *action);
};
#endif // TOOLLAYOUT_H
ToolLayout.cpp
cpp
#include "toollayout.h"
#include "ui_toollayout.h"
#include"QMessageBox"
ToolLayout::ToolLayout(QWidget *parent) :
QWidget(parent),
ui(new Ui::ToolLayout)
{
ui->setupUi(this);
//文字居中
ui->label_2->setAlignment(Qt::AlignCenter);
ui->label_3->setAlignment(Qt::AlignCenter);
ui->label_4->setAlignment(Qt::AlignCenter);
//初始化下拉菜单
QMenu* menu = new QMenu(this);
actionIpSet = new QAction("actionIpSet", this);
actionAuthorize = new QAction("actionAuthorize", this);
menu->addAction(actionIpSet);
menu->addAction(actionAuthorize);
menu->addSeparator();
menu->setWindowFlags(menu->windowFlags() | Qt::FramelessWindowHint);
// menu->setAttribute(Qt::WA_TranslucentBackground);
// menu->setStyleSheet(" QMenu {border-radius:5px;font-family:'Microsoft Yahei';font-size:14px;color:#fff;}"
// " QMenu::item {height:30px; width:100px;padding-left:20px;border: 1px solid none;}"
// "QMenu::item:selected {background-color:rgb(65,173,255);\
// padding-left:20px;border: 1px solid rgb(0,120,215);}");
ui->pushButton->setMenu(menu);
connect(menu, &QMenu::triggered, this, &ToolLayout::slot_action_triggered);
}
ToolLayout::~ToolLayout()
{
delete ui;
}
//.cpp
void ToolLayout::slot_action_triggered(QAction *action)
{
if(action == actionIpSet)
{
QMessageBox::information(this,u8"INFO",u8"actionIpSet");
}
else if(action == actionAuthorize)
{
QMessageBox::information(this,u8"INFO",u8"actionAuthorize");
}
}