我在头文件中有一个接口类,代码如下。
预计将实施如下所示。
class Interface
{
...
}
#define InterfaceIID "Interface"
Q_DECLARE_INTERFACE(Interface, InterfaceIID)
预计将实施如下所示。
class Implementation : public QWidget, public Interface
{
Q_OBJECT
Q_INTERFACES(Interface)
...
}
我在我的应用程序中传递实现我的接口的对象指针。现在我知道每个接口对象也是一个QWidget,因为这是唯一支持的用例。
我的问题是,当我需要一个QWidget对象时,如何将我的接口对象强制转换为QWidget?
qobject_cast<QWidget*>(interface) //does not compile
dynamic_cast<QWidget*>(interface) //works but is it the right way?
使用dynamic_cast()是唯一的方法吗?我可以使用qobject_cast()将QWidget强制转换为Interface,但是反向操作不起作用。
我知道dynamic_cast()在共享库中不安全,因此我试图避免使用它。
正确的方法是什么?