效果
MainWindow.h
#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.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();
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);
ui->pushButton_4->setMenu(menu);
centralWidget()->setLayout(qHbox);
connect(menu, &QMenu::triggered, this, &MainWindow::slot_action_triggered);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slot_action_triggered(QAction *action)
{
if(action == actionIpSet)
{
}
else if(action == actionAuthorize)
{
}
}
ToolLayout.h
#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.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);
ui->pushButton->setMenu(menu);
connect(menu, &QMenu::triggered, this, &ToolLayout::slot_action_triggered);
}
ToolLayout::~ToolLayout()
{
delete ui;
}
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");
}
}