- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
谁能用尽可能简单的术语(或尽可能简单)解释什么 qobject_cast
是,它的作用以及为什么我们需要将一种类类型转换为另一种类类型?
比如,我在转换 int
的意义上进行了类型转换作为char
或 QString
也许使用 QMessageBox
, 但为什么要分到不同的类中呢?
最佳答案
在你开始学习之前qobject_cast
也就是说,您需要知道 C++ 的 dynamic_cast
是什么是。动态 Actor 就是关于 polymorphism .
C++ 的动态转换使用 RTTI (运行时类型信息)来转换对象。但是 qobject_cast
在没有 RTTI 的情况下执行此操作。
例如,假设我们有一个汽车工厂函数。像这样:
Car* make_car(string brand){
if(brand == "BMW"){
return new BmwCar;
}
if(brand == "Audi"){
return new AudiCar;
}
return nullptr;
}
注意 BmwCar
和 AudiCar
类继承 Car
类。使用此功能,我们可以仅使用一个功能来制造不同的汽车。例如:
string brand;
cin >> brand;
Car *car = make_car(brand);
BmwCar *bmw = dynamic_cast<BmwCar*>(car);
if (bmw != nullptr) {
cout << "You've got a BMW!";
}
AudiCar *audi = dynamic_cast<AudiCar*>(car);
if (audi != nullptr) {
cout << "You've got a Audi!";
}
如果没有 dynamic_cast
,您将无法确定 car
是 BmwCar
还是 AudiCar
。
dynamic_cast
和 qobject_cast
有什么区别?关于c++ - 什么是 qobject_cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43994584/
我已经派生了 QGraphicsItem 和 QGraphicsScene 类。我希望这些项目能够调用 scene() 并获得一个 derviedGraphicsItem * 而不是 QGraphic
谁能用尽可能简单的术语(或尽可能简单)解释什么 qobject_cast是,它的作用以及为什么我们需要将一种类类型转换为另一种类类型? 比如,我在转换 int 的意义上进行了类型转换作为char或 Q
我刚刚在 Qt 中找到了以下代码,我有点困惑这里发生了什么。 尤其是reinterpret_cast(0)有吗? template inline T qobject_cast(const QObje
我有一个纯虚拟A类,我在上面做 Q_DECLARE_INTERFACE(A, "org.something.A") 我有一个实现为类 B 的插件,它继承了 A 和 QObject,具有接口(inter
我正在尝试用 Qt 编写一个应用程序,在我遇到这个愚蠢的问题之前,该应用程序运行得还算不错。我有一个 Node 类,它可以有一个指向 Workplace 类实例的指针。我还为该指针定义了 getter
在Qt documentation , 有一个使用 qobject_cast 的例子。 按照这个例子,我尝试了这个: #include #include #include void test_c
考虑到布局是在 QWidget 中设置的,代码如下: setLayout(new QVBoxLayout); 然后需要检索它(向布局添加更多内容)。这是通过以下代码完成的: QHBoxLayout *
我有一个由 QFutureWatcher 触发的插槽。我正在尝试转换发件人以获得结果 QFutureWatcher>* QFW = qobject_cast>*>(sender()); 但不断得到 e
我在 Qt 中实现低级插件,但偶然发现了一个奇怪的编译错误。 当我尝试使用 qobject_cast 将插件实例转换为 const 接口(interface)指针时,它告诉我接口(interface)
大师和模板专家,我需要你们的帮助... 我目前正在寻找一种检查 QObject 父层次结构的解决方案。我有一个具有以下层次结构(父到子)的自定义 QDialog: QDockWidget > Cust
我有一组相当复杂的 C++ 类,它们是用 Java 重写的。所以每个类都有一个继承类,然后它还实现了一个或多个抽象类(或接口(interface))。 是否可以使用 qobject_cast() 从类
来自Qt的计算器示例: void Calculator::digitClicked() { Button *clickedButton = qobject_cast(sender());
我有一个 Subclass 类,它是 QObject 的子类。我想知道项目何时被删除,所以我将这个插槽连接到 Subclass 继承的 QWidget::destroyed() 信号。但是,当我尝试使
我是一名优秀的程序员,十分优秀!