关于QT5 自定义信号槽 以及信号槽的重载问题

记录一下,自定义信号槽过程中遇到的错误。
注意这部分即可
**void(signaldemo:: *vcp)() = &(signaldemo::value_changed);
void(signaldemo:: *vcp2)(QString) = &(signaldemo::value_changed);
void(slotdemo:: nslot2)(QString) = &(slotdemo::slotfunc);
void(slotdemo:: nslot1)() = &(slotdemo::slotfunc);

#ifndef SIGNALDEMO_H
#define SIGNALDEMO_H
#include <QDebug>
#include <QObject>

class signaldemo:public QObject
{
    Q_OBJECT
        
public:
    signaldemo();
    void senddd();
signals:
    void value_changed();
    void value_changed(QString );
};

#endif // SIGNALDEMO_H


```slot.cpp
#ifndef SLOTDEMO_H
#define SLOTDEMO_H

#include <QObject>

class slotdemo:public QObject
{
    Q_OBJECT
public:
    slotdemo();
public slots:
    void slotfunc();
    void slotfunc(QString);
};

#endif // SLOTDEMO_H

#include <QCoreApplication>
#include "signaldemo.h"
#include "slotdemo.h"
#include <QObject>
//#include <windows.h>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //qDebug()<<"starting";
    signaldemo sd ;
    //    slotdemo st;
    //    void(slotdemo::*st)= &slotdemo::slotfunc;
    //    auto  *sd = new signaldemo();
    auto *st = new slotdemo();
    void(signaldemo:: *vcp)() = &(signaldemo::value_changed);
    void(signaldemo:: *vcp2)(QString) = &(signaldemo::value_changed);
    void(slotdemo:: *nslot2)(QString) = &(slotdemo::slotfunc);
    void(slotdemo:: *nslot1)() = &(slotdemo::slotfunc);
//    QObject::connect(&sd,&signaldemo::value_changed,st,&slotdemo::slotfunc);  //注意是否为信号和槽函数
    QObject::connect(&sd,vcp2,st,nslot2);
    QObject::connect(&sd,vcp,st,nslot1);
    //    QObject::connect(&sd,&signaldemo::value_changed,&st,&slotdemo::slotfunc);
    //Sleep(1000);
    sd.senddd();
    return a.exec();
}

实现部分自己随便实现即可。

猜你喜欢

转载自blog.csdn.net/u012422524/article/details/106197588