QT 中,给新建对象传递函数指针?
时间: 2023-12-13 09:58:04 浏览: 174
在 Qt 中给新建对象传递函数指针可以通过以下步骤实现:
1. 定义一个函数指针类型,例如:
```
typedef void (*FuncPtr)(int);
```
2. 在新建对象时将函数指针作为参数传递,例如:
```
MyClass *myobject = new MyClass(myfunction);
```
其中,`myfunction` 是一个函数指针,`MyClass` 是需要传递函数指针的类。
3. 在 `MyClass` 中定义一个构造函数,接收函数指针作为参数,并将其存储在类的成员变量中,例如:
```
class MyClass {
public:
MyClass(FuncPtr funcPtr) {
m_funcPtr = funcPtr;
}
private:
FuncPtr m_funcPtr;
};
```
4. 在 `MyClass` 中需要调用函数指针时,通过成员变量 `m_funcPtr` 调用,例如:
```
m_funcPtr(42);
```
这将会调用传递进来的函数指针,并将参数 `42` 传递给该函数。
相关问题
QT 中,给新建对象传递函数指针?函数怎么定义?
在 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);
}
```
需要注意的是,在使用函数指针时,需要进行类型转换,以确保函数指针的类型和被调用函数的类型相匹配。
QT 中,给新建对象传递带参数的函数指针?函数怎么定义?
在 QT 中给新建对象传递带参数的函数指针,需要先定义一个函数指针类型,然后在对象构造时将函数指针作为参数传入。
下面是一个简单的例子:
首先定义一个函数指针类型:
```cpp
typedef void (*FuncPtr)(int);
```
然后定义一个类,该类的构造函数接受一个函数指针参数:
```cpp
class MyClass {
public:
MyClass(FuncPtr func) : m_func(func) {}
void callFunc(int arg) {
if (m_func) {
m_func(arg);
}
}
private:
FuncPtr m_func;
};
```
在使用该类时,可以将一个带参数的函数指针传入:
```cpp
void myFunc(int arg) {
qDebug() << "myFunc called with argument" << arg;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
FuncPtr func = &myFunc;
MyClass obj(func);
obj.callFunc(123);
return a.exec();
}
```
运行结果为:
```
myFunc called with argument 123
```
这样就可以在 QT 中给新建对象传递带参数的函数指针了。
阅读全文