qobject_cast
时间: 2023-07-08 15:47:56 浏览: 178
基于Modbus协议读取RS485温湿度传感器数据的上位机
`qobject_cast` 是 Qt 提供的一个运行时类型转换函数,用于将一个 `QObject` 派生类指针强制转换为另外一个 `QObject` 派生类指针,如果类型转换不成功则返回 `nullptr`。
使用该函数时需要注意以下几点:
1. 转换的两个类型必须都是 `QObject` 派生类,否则会编译错误。
2. 转换的两个类型必须都是使用 `Q_OBJECT` 宏声明的,否则会编译错误。
3. 转换的两个类型必须处于同一个线程中,否则可能会返回 `nullptr`。
下面是一个示例代码:
```c++
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget* parent = nullptr) : QWidget(parent) {}
};
class MyButton : public QPushButton
{
Q_OBJECT
public:
MyButton(QWidget* parent = nullptr) : QPushButton(parent) {}
};
void test()
{
QObject* obj = new MyWidget();
MyButton* btn = qobject_cast<MyButton*>(obj); // 返回 nullptr
MyWidget* widget = qobject_cast<MyWidget*>(obj); // 返回 MyWidget 指针
delete obj;
}
```
在上面的示例中,我们创建了一个 `MyWidget` 类型的对象,并将其指针转换为 `MyButton` 类型和 `MyWidget` 类型。由于 `obj` 指针指向的是 `MyWidget` 类型的对象,所以将其转换为 `MyButton` 类型时会返回 `nullptr`,而将其转换为 `MyWidget` 类型时会返回 `MyWidget` 指针。
阅读全文