Qt自定义类使用自定义含参信号与槽

最近在自定义类中使用了信号来连接到MainWindow类中的槽函数,具体操作如下:

要点一:继承QObject

在头文件中初始化自定义类MyThread1,这里由于继承的QThread已经继承了QObject,无需嵌套继承,故不必public QObject,但仍需加入Q_OBJECT来保证moc编译器可以连接信号和槽函数
请添加图片描述

//位置:mainwindow.h
//一个线程类的实例,单纯使用自定义信号的话除了signals以外的部分都不用关心
class MyThread1 : public QThread 
{
    Q_OBJECT

public:
    MyThread1();
    void stop();
    QTcpSocket* position;
    bool pos_connected;
signals:
    void pos_update(QString x,QString y);
protected:
    void run();
private:
    volatile bool stopped;
};

要点二:自定义信号与槽

在自定义的类里面声明信号pos_update(QString x,QString y),但其只是信号,无需在cpp文件中给出实现
请添加图片描述


MainWindow中加入信号对应的槽函数

请添加图片描述


注意:信号与槽的参数数量、类型与顺序要保持一致(可以出现信号参数比槽函数多,但也不建议这么做,反之槽函数参数比信号参数多则是绝对不行的)至于使用自定义的数据类型作为信号参数可以参考链接
槽函数必须给出实现:

//位置:mainwindow.cpp
//接收另一个线程传来的消息后将其展示在ui界面上
void MainWindow::update(QString x,QString y)
{
    ui->pos_x->setText(x);
    ui->pos_y->setText(y);
}

要点三:连接信号与槽

实例化类时最好使用指针,便于信号连接,下图中有两种信号连接的表达方式,本质上都是connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method,
Qt::ConnectionType type = Qt::AutoConnection)
更多连接写法见[链接](https://blog.csdn.net/qq_27898413/article/details/11967请添加图片描述
7345)

//位置:mainwindow.cpp声明的全局变量
MyThread1 *thread1 = new MyThread1();
//位置:mainwindow.cpp中MainWinw类的初始化函数中
connect(thread1,&MyThread1::pos_update,this,&MainWindow::update);

要点四:发送信号

直接在需要发送信号的地方emit即可

//位置:mainwindow.cpp中任何需要调用update的地方
emit pos_update(posx,posy);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值