1.创建类并自定义信号与事件

创建类并自定义信号与事件

当QT的ui中的事件无法满足我们的需求时,可以通过自定义事件的方式实现。

1、创建类

  • 使用的组件是combobox所以自定义的类继承与QComboBox
  • 重新构造方法,将无参构造写成MyComboBox(QWidget *parent);,并调用QComboBox(parent)
  • 写上宏定义Q_OBJECT,方便发信号与接收槽
  • 重写鼠标点击事件void mousePressEvent(QMouseEvent *e) override;
  • 创建信号void refresh();

mycombobox.h

#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H

#include <QComboBox>
#include <QWidget>

class MyComboBox : public QComboBox
{
    Q_OBJECT
public:
    MyComboBox(QWidget *parent);
protected:
    void mousePressEvent(QMouseEvent *e) override;
signals:
    void refresh();
};

#endif // MYCOMBOBOX_H

mycombobox.cpp

#include "mycombobox.h"
#include <QMouseEvent>

MyComboBox::MyComboBox(QWidget *parent):QComboBox(parent)
{
}

void MyComboBox::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        emit refresh();
    }
    QComboBox::mousePressEvent(e);
}

2、升级组件

选中对应的combobox,将其提升为MyComboBox,方便连接信号。

3、实现信号与槽的连接

widget.cpp

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
        //增加对应的连接
connect(ui->comboBox_serialNum,&MyComboBox::refresh,this,&Widget::refreshSerialName);

}

void Widget::refreshSerialName()
{
	//实现功能
}

widget.h

class Widget : public QWidget
{

private slots://在槽中定义接收的方法
	    void refreshSerialName();
}
posted @ 2025-05-09 11:47  站着说话不腰疼  阅读(33)  评论(0)    收藏  举报