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");
    }
}
相关推荐
一个没有本领的人10 分钟前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
一只自律的鸡32 分钟前
C项目 天天酷跑(下篇)
c语言·开发语言
源码哥_博纳软云36 分钟前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
沐泽Mu39 分钟前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习
小板凳-BGM1 小时前
C# 第二阶段 modbus
开发语言·ui·c#
问道飞鱼1 小时前
【Python知识】Python进阶-什么是装饰器?
开发语言·python·装饰器
长安——归故李1 小时前
【C语言】成绩等级制
c语言·开发语言
黄金小码农1 小时前
c# 2024/12/25 周三
开发语言·c#
忒可君2 小时前
C# winform 报错:类型“System.Int32”的对象无法转换为类型“System.Int16”。
java·开发语言
GuYue.bing2 小时前
网络下载ts流媒体
开发语言·python