- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个纯虚拟A类,我在上面做
Q_DECLARE_INTERFACE(A, "org.something.A")
我有一个实现为类 B 的插件,它继承了 A 和 QObject,具有接口(interface) A 并实现了 A 的所有纯虚方法
class B : public QObject, public A
{
Q_OBJECT
Q_INTERFACES(A)
public:
void someMethod();
}
在 cpp 中:
Q_EXPORT_PLUGIN2(A, A)
这很好用。实际上有很多不同的接口(interface),核心应用程序(我没有写过,也不能做大的修改)调用
qobject_cast<A *>(bPointer);
并检查结果以了解某个插件是否实现了接口(interface)。
所有这些都非常有效。
但是,我希望在 B 类中在运行时确定我是否要实现某个接口(interface)。
这些方法总是会被实现,但我有时希望 qobject_cast 失败但在运行时确定(对于同一接口(interface),单个实例总是失败或成功)。
这听起来可能很奇怪,但这样做的原因是我想添加 Python(或其他语言)插件。他们会有一个 C++ 包装器。他们的 python 源代码将使用 rcc 文件存储。所有 Python 插件的 C++ 代码应该相同。
c++ 包装器将调用 python 方法来确定 python 代码实现了哪些接口(interface),如果 python 代码未实现接口(interface),则使 qobject_cast 失败。C++ 包装类将实现所有接口(interface)方法并将调用转发给 python,但只有成功转换的才会真正被调用。
通过重新实现 QObject 的元相关方法可能是可行的,但我不知道是哪个。
我希望你能理解我试图做的事情(虽然不是很清楚)。也许有一种完全不同的方式来做到这一点?
谢谢
最佳答案
您无法更改 qobject_cast
行为,仅使用公共(public) Qt API。另请注意,每个插件库只能有一个插件对象实例。
解决方案将是一个插件,作为工厂工作并按请求返回接口(interface)。
关于c++ - 模拟 qobject_cast 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469268/
我已经派生了 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() 信号。但是,当我尝试使
我是一名优秀的程序员,十分优秀!