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();
}

浙公网安备 33010602011771号