代码编织梦想

QT自定义继承控件类添加信号和槽

原因:在使用QT comboBox控件时发现没有点击事件(clicked()),翻阅博客查找到此类解决办法,本文介绍使用QTcreator中ui设计直接生成信号对应槽的方法,不用在程序内使用connect函数联系信号和槽的方式,前一种在参考博客评论区有大神提到,后一种方法在参考博客中有具体介绍,特以为记。

方法总结

1、新建mycombobox.h文件,编写MycomboBox类继承QComboBox类,添加鼠标事件(mousePressEvent)点击信号clicked()

#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H

#include <QComboBox>//QComboBox类头文件
#include <QMouseEvent>//QMouseEvent鼠标事件头文件

class MycomboBox : public QComboBox//继承QComboBox类
{
    Q_OBJECT    //只有加入Q_OBJECT,才能使用信号signal和槽slot的机制
public:
    explicit MycomboBox(QWidget *parent = 0);//编写带父类参数的构造函数
    ~MycomboBox();//添加析构函数

protected:
    virtual void mousePressEvent(QMouseEvent *e);  //添加鼠标点击事件

signals:
    void clicked();  //自定义点击信号,在mousePressEvent事件发生时触发
};

#endif // MYCOMBOBOX_H

2、新建mycombobox.cpp文件,编写MycomboBox构造函数继承QComboBox构造函数,编写鼠标事件函数点击槽函数利用QT设计功能添加(后续步骤处理)。

#include "mycombobox.h"

MycomboBox::MycomboBox(QWidget *parent) :
    QComboBox(parent)//继承QComboBox构造函数
{}
MycomboBox::~MycomboBox()
{}

//鼠标活动触发事件
void MycomboBox::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)//判断事件为鼠标左键点击事件
    {
        emit clicked();  //发出clicked信号
    }
    //将该事件传给父类处理,这句话很重要,如果没有,父类无法处理本来的点击事件
    //QComboBox::mousePressEvent(event);
    //如果不想父类触发也可以注释掉,写一个信号或变量保存该事件,等点击事件处理完毕再执行
}

上面两部分关于类的构造函数编写是否带有父类参数,取决于原控件使用时是否有父类参数,作者这里设计生成的应用代码带有父类参数,因此为了与原代码一致,自定义类的构造函数也定义为带有父类参数,否则会报没有匹配的错。

3、进入QT设计功能界面,将原comboBox控件提升为自己创建的MycomboBox类
具体步骤为:打开ui界面----->>选中QComboBox控件,右击----->>选择“提升为”----->>在“提升的类名称”里面填入新建的类“MyComboBox”名称----->>在“头文件”里面填写“mycombobox.h”(都要注意大小写,不要写错了)----->>点击“添加”按钮----->>再点击“提升”按钮。
提升后控件类名会变成自定义类的名称“MyComboBox”。
在这里插入图片描述

4、给提升后的控件添加clicked()信号click()槽
具体步骤为:打开ui界面----->>选中QComboBox控件,右击----->>选择“改变信号/槽”----->>在“信号文本栏”点击“+”按钮----->>写入clicked()(注意:这里应当和来自定义类中的信号名称一致)----->>点击“OK按钮”保存。
在这里插入图片描述

5、再次右击控件,选择“转到槽”弹窗里就出现所添加的信号选项了,选中后会自动连接到生成的槽函数,就可以愉快的编写想要的效果了。
在这里插入图片描述

参考博客

[1] QT中ui界面的控件QComboBox实现鼠标点击事件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_46637263/article/details/111068370

Qt+OpenCV发布可执行程序(打包DLL文件)-爱代码爱编程

一、目的         OpenCV是最常用的开源视觉库,Qt是当前最常用的GUI开发框架,用他们做出的软件如果要在其他终端运行就需要提前打包,将依赖的环境连同程序一起打包成可执行文件,这里是使用添加DLL文件的方式,做出绿色版可执行文件,通过U盘直接将生成程序拷到其他电脑上可以直接使用。   二、解决方法 2.1 生成exe文件      

PyQt常用控件的组合使用-爱代码爱编程

写作思路 这次使用到的空间有以下几种: 1、QPushButton 是我们之前用的按钮,也可以当作Toggle用 2、QCheckBox 3、QSlider 4、QCalendarWidget 5、QProgressBar 效果如下,可以改变QFrame的颜色,只有选中了对应Toggle才能改变对应的颜色通道,CheckBox可以控制Slider是否显示

Qt实现一个支持QSS的Switch Button(开关按钮)-爱代码爱编程

目录 Qt实现一个支持QSS的Switch Button(开关按钮)问题解决思路实现方式其他不同的 Switch Button总结 Qt实现一个支持QSS的Switch Button(开关按钮) 本文会比较长,目的是为了提供一种实现自定义复杂控件的方式,对于使用 QSS 应用样式的项目可能会有帮助。 实现的过程会相对比较复杂和难理解,仅作为

使用QSharedMemory进行程序内存管理-爱代码爱编程

QSharedMemory 共享内存处理类 这个类的功能是挺强大的,本次只记录这个类的另一种用法。 通过创建共享内存,用共享内存的方式,防止程序多次启动。 在main.cpp中加入以下代码,可防止程序多次启动:   QSharedMemory *shareMem = new QSharedMemory(QString("xxxName")); 

Qt开发C++,比较实用的函数(持续记录中)-爱代码爱编程

1. std::string 和 QString 的转换 // std::string 转换为 QString QString MainWindow::string_to_QString(const std::string str) { return QString::fromLocal8Bit(str.data()); } // QStrin

(3)pyqt5教程--->信号与槽初试-爱代码爱编程

GitHub连接:本专栏所有源代码的GitHub直通车 上一篇已经讲了如何使用QTdesigner生成ui文件并转化为py文件,最终实现界面代码分离的效果 信号与槽作是 QT 的核心机制,是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。它为高层次的事件处理自动生成所需要的附加代码。例如在tkinte