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

效果

在这里插入图片描述

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_H

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();
    // 将 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

#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

#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");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/317022.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js动态设置关键侦@keyframes

js动态设置关键侦keyframes 1.前置知识 关键侦keyframes规则通过在动画序列中定义关键侦的样式来控制CSS动画序列的中间步骤 keyframes slidein {from {transform: translateX(0%);}to {transform: translateX(100%);} } // from 等价于 0%&#xff1b;to 等价与 100% // 或…

如何确定测试用例的优先级?5个方面

测试用例优先级的确定&#xff0c;有助于测试团队合理分配测试资源&#xff0c;集中精力测试重点功能和场景&#xff0c;确保重点功能测试用例的覆盖率&#xff0c;从而有利于快速发现和解决重点功能缺陷&#xff0c;确保项目进度和质量。 如果测试用例没有明确的优先级&#x…

函数的秘密

1. 函数的概念 在数学中我们学习过函数&#xff0c;而在C语言中其有着与数学不同的概念&#xff1a; 在C语言中&#xff0c;函数是指一组执行特定任务的语句&#xff0c;这些语句可以重复使用&#xff0c;并且可以在程序的不同部分调用。通过使用函数&#xff0c;程序员可以将…

GIS融合之路(五)番外-山海鲸的体积云又又又升级了

一转眼自上一篇文章已经过去半年之久&#xff0c;承诺的CesiumJS的天气文章竟然又又又又跳票了&#xff0c;没办法。开发任务时间紧&#xff0c;任务重。GIS的进一步整合进入深水区&#xff0c;每向前迈一步都是步履维艰&#xff0c;好不容易把体积雾&#xff0c;接触阴影&…

利用docker的LNMP

服务器环境 容器 操作系统 IP地址 主要软件 nginx CentOS 7 172.20.0.10 Docker-Nginx mysql CentOS 7 172.20.0.20 Docker-Mysql php CentOS 7 172.20.0.30 Docker-php 任务需求 使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台…

Spark---RDD(Key-Value类型转换算子)

文章目录 1.RDD Key-Value类型1.1 partitionBy1.2 reduceByKey1.3 groupByKeyreduceByKey和groupByKey的区别分区间和分区内 1.4 aggregateByKey获取相同key的value的平均值 1.5 foldByKey1.6 combineByKey1.7 sortByKey1.8 join1.9 leftOuterJoin1.10 cogroup 1.RDD Key-Value…

Javaweb的网络投票系统的设计与实现

目的与意义 原始的投票管理基本上是人工操作&#xff0c;效率低下&#xff0c;缺乏方便性&#xff0c;网上投票管理系统运用计算机和其他附加设备&#xff0c;不再需要手工操作&#xff0c;基本上是全自动化&#xff0c;能够节省人力&#xff0c;大大的提高了效率。使投票变得…

【项目管理】CMMI-风险与机会管理过程

1、文档结构 2、风险与机会概率 风险与机会概率指的是风险与机会实际发生的可能性。可以用自然语言术语来映射数字概率范围。下表列出了七段概率分级中自然语言术语和数字概率范围映射关系。注意&#xff0c;用来计算的概率值等于概率范围的中间值取整。有了映射表格的帮助&am…

C++ Primer 6.3 返回类型和return语句 知识点+练习题

C Primer 6.3 返回类型和return语句 无返回值函数有返回值的函数两个错误值是如何被返回的返回类类型的函数和调用运算符引用返回左值列表初始化返回值主函数main的返回值返回数组指针 递归练习题疑问待更新 无返回值函数 用在返回值类型为void的函数中&#xff0c;可以不写re…

u盘监控系统—公司电脑如何监控U盘使用?【详解】

在当今的办公环境中&#xff0c;U盘等移动存储设备已成为数据传输和存储的重要工具。 然而&#xff0c;随着U盘的广泛使用&#xff0c;也带来了潜在的安全风险&#xff0c;如数据泄露、病毒传播等。 因此&#xff0c;对于随时会有数据泄露风险的企业而言&#xff0c;U盘的使用…

深入浅出的说地弹(即地噪声)

1. 什么是地弹&#xff0c;地弹的概念&#xff0c;为何叫地弹 地弹、振铃、串扰、信号反射这几个在信号完整性分析总是分析的重点对象。初学者一看&#xff1a;好高深&#xff01;其实&#xff0c;感觉高深是因为你满天听到“地弹”二字&#xff0c;却到处找不到“地弹…

使用pandas按照商品和下单人统计下单数据

目录 一&#xff1a;需求描述 二&#xff1a;代码实现 三&#xff1a;注意事项 一&#xff1a;需求描述 最近运营那边给到一个excel表格&#xff0c;是一个小程序用户的下单数据&#xff0c;要以商品为维度&#xff0c;统计用户下单情况&#xff0c;主要是下单的商品总金额&…

DNS解析和主从复制

一、DNS名称解析协议 二、DNS正向解析 三、DNS主从复制 主服务器 从服务器

CAN总线通信详解 (超详细配34张高清图)

CAN总线通信详解 (超详细配34张高清图) 1. CAN总线历史 CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO国际标准化的串行通信协议。 在当前的汽车产业中&#xff0c;出于对安全性、舒适性、方便性、低公害、低成本的要求&#…

案例119:基于微信小程序的宿舍管理系统设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【Python机器学习】分类器的不确定估计——决策函数

scikit-learn接口的分类器能够给出预测的不确定度估计&#xff0c;一般来说&#xff0c;分类器会预测一个测试点属于哪个类别&#xff0c;还包括它对这个预测的置信程度。 scikit-learn中有两个函数可以用于获取分类器的不确定度估计&#xff1a;decidion_function和predict_pr…

kubebuilder+code-generator开发k8s的controller

本文记录用kubebuilder和code-generator开发k8s的crd控制器。 概览 和k8s.io/code-generator类似&#xff0c;是一个码生成工具&#xff0c;用于为你的CRD生成kubernetes-style API实现。区别在于&#xff1a; Kubebuilder不会生成informers、listers、clientsets&#xff0c…

【工具栏】jclasslib 插件的安装和使用

1. 安装 2.使用 安装之后 在 view 的 ToolWindows 里也有一个这样的窗口 jclasslib 的主要作用是查看字节码的相关信息 package com.test;public class Test {public static void main(String[] args) {Integer a 1;int b a 2;} }例如我写了一段这样的代码&#xff0c;然后去…

语义分割发展现状

语义分割是对图像中的每一个像素进行分类&#xff0c;目前广泛应用于医学图像与无人驾驶等。从这几年的论文来看&#xff0c;这一领域主要分为有监督语义分割、无监督语义分割、视频语义分割等。 语意分割究竟有什么用呢&#xff1f;似乎看起来没有目标检测/跟踪等应用范围广。…

P1379 八数码难题

题目描述 在 33 的棋盘上&#xff0c;摆有八个棋子&#xff0c;每个棋子上标有 1 至 8 的某一数字。棋盘中留有一个空格&#xff0c;空格用 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是&#xff1a;给出一种初始布局&#xff08;初始状态&#xff09;和目标布局&…