提要

继承于QPushButton的自定义按钮类,其右键弹出一个弹框,创建多个这样的自定义按钮在窗口中,每一时刻只显示一个右键弹出框,避免同一时刻,多个按钮右键弹出弹出框后,未及时关闭弹出框导致的同一时刻有多个弹出框。

实现

1.在自定义的按钮里,创建按钮时在构造函数中传入参数id,用于区别不同的按钮,id是唯一的。

myButton(int index,QWidget *parent = nullptr);

上述的构造函数中参数index实际上就是按钮的id,创建按钮的时候传入,然后创建类成员变量来保存这个id.

int          m_index;//按钮的下标,用于区别点击的是哪个按钮

2.每个按钮,自带一个对话框,在自定义按钮的构造函数中创建,但是先不显示该对话框,在按钮上点击右键时显示弹出框。

myButton::myButton(int index,QWidget *parent)
:QPushButton(parent),m_index(index),m_isLongPress(false)
{//    initBtnStyle();//在自定义控件的本身设置样式也可以,在调用类中设置自定义控件的样式也行m_configName = new configBtnNameDialog(this);connect(m_configName,&configBtnNameDialog::signalSave,this,&myButton::setSceneBtnName);
}

重写鼠标点击事件,在点击右键的时候,显示弹出框,

void myButton::mousePressEvent(QMouseEvent *e)
{if(e->button() == Qt::RightButton){//显示对话框showEditNameDlg();}QPushButton::mousePressEvent(e);
}

这样就会出现,创建几个按钮后,每在一个按钮上点击右键,就会弹出一个对话框,但是要想同一时刻只显示一个右键弹出框,就需要在每次点击右键时将之前已经显示的对话框隐藏掉。
3.采用信号槽来实现上述同一时刻只显示一个对话框
在显示右键弹出框后发送一个信号到按钮所在的父窗口,并通过这个信号将按钮的id传递到都窗口,这样父窗口就知道了那个按钮的右键弹出框已经显示了,再在每次点击右键对话框显示前发送信号到按钮的父窗口,告诉父窗口需要隐藏之前已经显示的对话框,这样按钮的父窗口可以根据之前传过去已经显示对话框的按钮的id,给改id的按钮发送信号,告知该按钮应该右键弹出框。

void myButton::showEditNameDlg()
{if(m_configName != nullptr){m_configName->setGeometry(cursor().pos().x(),cursor().pos().y() - 10,m_configName->size().width(),m_configName->size().height());m_configName->show();emit signalShowDlgBtnId(m_id);//发送显示弹出框的按钮的id}
}

按钮的父窗口保存已经显示弹出框的按钮的id

void SystemScenenForm::slot_showDlgBtnId(int &id)
{m_showDlgBtnId = id;
}

每次点击按钮之前发信号给按钮的父窗口,使之前已经显示的右键弹出框隐藏。

void myButton::mousePressEvent(QMouseEvent *e)
{if(e->button() == Qt::RightButton){//若之前有弹出框存在,则先隐藏之前的弹出框emit sigHideShowDlg();showEditNameDlg();}QPushButton::mousePressEvent(e);
}

父窗口接收信号,发送信号到已经显示右键弹出框的按钮,

void SystemScenenForm::slot_hideShowDlg()
{emit sigHideBtnShowDlg(m_showDlgBtnId);
}

让其隐藏已经显示的右键弹出框。

void myButton::slot_hideBtnShowDlg(int &id)
{if(m_id == id){m_configName->hide();}
}

上述就可以解决一个自定义按钮类,右键出弹出框,创建多个这样的按钮后,点击右键忘记关闭弹出框,又去在另一个按钮的右键上点击,这样会在同一时刻出多个弹出框的问题,使同一时刻只有一个弹出框显示。

qt自定义按钮类,每个按钮自带一个右键弹出框,如何使同一时刻只显示一个弹出框相关推荐

  1. 九龙战登录只显示一个服务器,九龙战新手必读 带你走出六大误区

    原标题:九龙战新手必读 带你走出六大误区 腾讯第一动作手游九龙战开启了不删档测试,相信很多玩家已经感受到了来自小怪的压力吧?记得第一次玩的时候,连第一关都没打过去.那么今天小编就给大家介绍一些小知识小 ...

  2. QT 自定义开关效果的按钮

    Qt 之自定义控件(开关按钮) Qt自定义控件13:继承QPushButton自绘按钮 有两种方式一个是继承 QPushButton:一个是继承 QWidget 这里选择继承 QPushButton( ...

  3. 201114阶段二qt自定义图元类

    目录 一.学习的知识点 一)自定义视图.场景.图元类 一)1 创建类 一)2 图元类的实现 一)3 advance槽函数 一)3 collidingItems()碰撞检测函数 二.上课没有听懂或者没有 ...

  4. 两个相邻盒子的边框怎么只显示一个_一篇文章带你快速理解盒子模型「经典案例」...

    今天带大家快速理解盒子模型,直接上代码: css盒子 我的css盒子测试模型 上面代码没有任何难度,只是写了一个div标签,大家已经知道,div标签是块级元素,所以会占满一行: 但是我们也注意到了图片 ...

  5. 【Qt】QStackedWidget:将多个窗口控件放入堆中,每次只显示一个窗口控件

    1.简介 QStackedWidget可以容纳多个窗口控件,每次只显示其中一个.例如:登录页面.各种功能页面等不同时显示的窗口,可以放入QStackedWidget中. 2.demo // 创建三个页 ...

  6. Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)

    目录 1.QPushButton按钮类 2.QRadioButton按钮类 3.QCheckBox按钮类 在GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作.在PyQt ...

  7. python如何设计工具类_Python基础之自定义工具类

    class ListHelper: @staticmethod def find_all(target, func_condition): """ 查找列表中满足条件的所 ...

  8. Qt自定义QPushButton

    目录 Qt自定义QPushButton 设置图标按钮 Qt自定义QPushButton 设置图标按钮 代码: m_pMinimizeButton = new QPushButton(this);m_p ...

  9. windows卸载qt_如何在Qt中显示一个窗口并在关闭后立即将其删除?

    作为一个非常简单的例子,我想在按下按钮时在Qt中显示一个对话框.通常的模式(在我正在申请的应用程序中)似乎如下: class MainWindow { ... private slots: butto ...

最新文章

  1. C#几种访问修饰符理解
  2. [codevs 1916] 负载平衡问题
  3. python --> Python初阶 --> 基础语法 --> 条件和分支
  4. Android studio 按钮排版,Android Studio自动排版的两种方法
  5. 黑马程序员-java-高新技术中《九》
  6. sql语句延时执行或者是指定时间执行
  7. ZOJ-1010 奇偶剪枝
  8. Kafka 可视化工具kafkatool简单使用入门
  9. php %3cpre%3c pre%3e,实验报告五 web 攻击靶机解题过程(未完成)
  10. ORB-SLAM2代码详解
  11. 广工drcom用openwrt极路由破解小记
  12. 【js 分页】js 分页 方法一 【实用】
  13. surface pro的TF卡有时候不感应不到,需要重新插拔?
  14. R语言 | 将CSV文件中原本为空白值的chr数据赋值为NA
  15. 词霸天下---136 词根 【-imag- = -imit- 图像 】仅供学习使用
  16. 安卓动画的简单实现方法(Animation和AnimationDrawable)
  17. Python自动签退脚本
  18. vue显示农历_vue中通过时间转换农历得方法封装
  19. 内蒙古自治区交通运输管理局容灾备份设备招标
  20. 台式计算机开关电源的电压规格,台式计算机ATX开关电源检修技巧

热门文章

  1. MaxCompute跨境访问加速解决方案
  2. 阿里云数据湖解决方案全面满足数据需求,帮助企业释放数据价值
  3. 上海鸥新:基于大数据的商场实时客流分析系统
  4. 程序员应如何理解高并发中的协程
  5. 看完这篇 HashMap ,和面试官扯皮就没问题了
  6. 牛!2020年,这项技术将获得1,000,000,000元人民币注资!
  7. 十大类疫情服务紧缺 阿里广发英雄帖抗疫小程序开发者最高可获50万元奖励
  8. @程序员,不要瞎努力!比起熬夜更可怕的是“熬日”!
  9. *计算机应用基础* 说课稿,中职计算机应用基础《EXCEL中函数的使用》说课稿.doc...
  10. Flowable 数据库表结构 ACT_RU_IDENTITYLINK