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");
    }
}
相关推荐
姜君竹几秒前
QT的工程文件.pro文件
开发语言·c++·qt·系统架构
奇树谦5 分钟前
使用VTK还是OpenGL集成到qt程序里哪个好?
开发语言·qt
VBA633716 分钟前
VBA之Word应用第三章第十节:文档Document对象的方法(三)
开发语言
老胖闲聊25 分钟前
Python Rio 【图像处理】库简介
开发语言·图像处理·python
码界奇点1 小时前
Python Flask文件处理与异常处理实战指南
开发语言·python·自然语言处理·flask·python3.11
贩卖纯净水.1 小时前
浏览器兼容-polyfill-本地服务-优化
开发语言·前端·javascript
k要开心1 小时前
C++概念以及基础框架语法
开发语言·c++
开发者工具分享2 小时前
如何应对敏捷转型中的团队阻力
开发语言
gregmankiw2 小时前
C#调用Rust动态链接库DLL的案例
开发语言·rust·c#
roman_日积跬步-终至千里2 小时前
【Go语言基础【20】】Go的包与工程
开发语言·后端·golang