刚接触Qt, 请问signal可以将函数指针作为参数吗?
myobject.h:
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
#include <functional>
class MyObject : public QObject {
Q_OBJECT
public:
explicit MyObject(QObject *parent = nullptr);
void someFunction();
signals:
void mySignal(const std::function<void()> &func);
public slots:
void mySlot(const std::function<void()> &func);
};
#endif // MYOBJECT_H
myobject.cpp:
#include "myobject.h"
#include <QDebug>
MyObject::MyObject(QObject *parent) : QObject(parent) {
connect(this, &MyObject::mySignal, this, &MyObject::mySlot);
}
void MyObject::someFunction() {
qDebug() << "This is someFunction.";
}
void MyObject::mySlot(const std::function<void()> &func) {
func();
}
main.cpp:
#include <QCoreApplication>
#include "myobject.h"
#include <functional>
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
MyObject obj;
std::function<void()> boundFunction = std::bind(&MyObject::someFunction, &obj);
emit obj.mySignal(boundFunction);
emit obj.mySignal([&obj] { obj.someFunction(); });
return app.exec();
}
2 回答1.7k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答980 阅读✓ 已解决
1 回答931 阅读
1 回答1.1k 阅读
在Qt中,signal可以将函数指针作为参数,但是不推荐。
因为SIGNAL和SLOT是宏,编译时会将信号函数和槽函数用字符串替换,并且不会判断参数是否相互匹配。