Qt点击按钮在附近弹出下拉框

效果

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");
    }
}
相关推荐
不过普通话一乙不改名41 分钟前
第四章:并发编程的基石与高级模式之atomic包与无锁编程
开发语言·golang
三小尛2 小时前
C++继承
开发语言·c++
诗书画唱2 小时前
JavaScript 基础核心知识点总结:从使用方式到核心语法
开发语言·javascript·ecmascript
AndrewHZ3 小时前
【python开发123】三维地球应用开发方案
开发语言·python·计算机视觉·三维重建·遥感图像分析
WSSWWWSSW3 小时前
Python Imaging Library (PIL) 全面指南:Python Imaging Library (PIL)基础图像处理入门
开发语言·图像处理·python
橙序员小站5 小时前
Lombok vs Java Record:谁才是未来?
java·开发语言·python
空白到白5 小时前
Python-机器学习概述
开发语言·python·机器学习
小苏兮5 小时前
【C++】类与对象(上)
开发语言·c++·学习