QT 中,给新建对象传递函数指针?函数怎么定义?
时间: 2024-05-11 15:19:32 浏览: 109
在 Qt 中,可以使用信号(Signal)和槽(Slot)机制来传递函数指针。
首先,在类的头文件中定义一个函数指针类型,例如:
```cpp
typedef void (*MyFunctionPtr)(int);
```
然后,在类中定义一个信号和一个槽,例如:
```cpp
class MyClass : public QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent = nullptr);
signals:
void mySignal(MyFunctionPtr funcPtr);
public slots:
void mySlot(int value);
};
```
在信号和槽中都可以使用该函数指针类型作为参数或返回值。例如,在某个函数中新建一个对象并传递一个函数指针:
```cpp
void someFunction()
{
MyClass *obj = new MyClass();
obj->mySignal(&myFunction);
}
void myFunction(int value)
{
// do something...
}
```
这样,当 MyClass 中发出 mySignal 信号时,传递的函数指针就是 myFunction。在 MyClass 的槽函数 mySlot 中,可以通过该函数指针调用 myFunction。
```cpp
void MyClass::mySlot(int value)
{
MyFunctionPtr funcPtr = nullptr;
funcPtr = reinterpret_cast<MyFunctionPtr>(sender()->metaObject()->method(senderSignalIndex()).methodPtr());
funcPtr(value);
}
```
需要注意的是,在使用函数指针时,需要进行类型转换,以确保函数指针的类型和被调用函数的类型相匹配。
阅读全文