问题标签 [qobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Qt 接口类
我怎样才能创建一个接口类,像这样:
和派生类
当我从这个类继承时,我收到一个错误,提到模棱两可的转换。我知道这是编译器的正确行为,但是我怎样才能为我的未来类获取接口插槽?也许我必须使用Q_DECLARE_INTERFACE
宏?
c++ - 如果从 QObject 派生的类的构造函数抛出,会发出 destroy() 吗?
我到处都看到了如下的 Qt GUI 语法:
我一直想知道如果发生异常,这是否会泄漏,因为我作为按钮和布局的父级提供的“this”没有完全构建,因此它可能不会破坏它的子级。
我在 MSVC2010 Qt4.8.3 中进行了尝试,看起来一旦完全创建了基本 QObject 类(当然首先完成),就可以将“this”传递给构造函数中的其他对象,它们将被销毁正确。
我还没有在 Qt 文档中找到可以保证这一点的地方,有人可以指出我,这样我就可以保证这在未来不会改变?
c++ - 宏和包含的 QObject 错误
我想在我的程序中使用信号和插槽,为此我被告知需要添加 Q_OBJECT,如下所示。
好吧,我有一堂课:
这会给出一个错误,上面写着“Q_OBJECT 没有命名类型”。如果我添加 #include 它会给出错误“未定义的对 A 的 vtable 的引用”
那么这样做的正确方法是什么?
c++ - 在 Qt 中序列化我的自定义类
我使用读/写 QObjects 是真的吗?我用它序列化一个类,但是反序列化它不是原始类!
我能做些什么?
这是我的基类标题:
.cpp 是:
我有一个从 base 继承的学生类:
这是我的主要内容:
这是我的输出:
c++ - 两个QObject的赋值
我有两个类名“mamad”和“student”,它们都继承自我的类“Base”,而“Base”继承自 QObject
在学生班中,我有一个字段:“主题”,它是一个 mamad,我有一个函数(setsubject),它采用一个新主题并将新主题复制到主题。
但我有一个错误:
我该如何解决?
这是我的妈妈课:
这是我的学生班:
我必须说我的getsubject函数也有这个问题,我不知道如何解决。?
请,请,帮助我
c++ - 使用 QObject 属性的指针
自从我学习 Qt 以来,我一直对以下事实感到困惑:在我读过的文档和书籍中,它们使用作为 QObject 子类实例的属性的指针,例如小部件。
我知道 QObjects 会删除他们的孩子,但我们不应该避免使用指针,除非真的有必要吗?
这是一个我不使用指针的工作示例:
小部件.h 文件:
和 Widget.cpp 文件:
这里唯一的区别是我必须在 Widget.h 文件中包含标题,这会是使用指针的原因吗?
我想补充一点,我在 StackOverflow 上看到了一些类似的问题,但答案是小部件应该存在于函数调用之间,但是当将它们用作属性时,这是在这里实现的。
c++ - 未解析的外部符号“public: virtual struct QMetaObject const * __thiscall Parent
我从 QObject 继承了一个类:
但是当我写:
我收到以下错误:
qt - 强制javascript重新评估信号?
所以我有以下情况:
QML 文件:
JavaScript 文件 (Script.js):
假设我在 SomeQtObject 中有一些信号,基于这些信号 getSource 应该重新评估。如何将这些信号绑定到 javaScript getSource 函数,以便在每次发出这些信号时重新评估?
c++ - 如果包含的对象也继承,我如何定义相互继承的容器?(以 QObject 为基础)
背景:
- 我有我的类
ObjectListModel
,它继承QAbstractListModel
并包含一个QObjectList
. 对象是行,它们的属性是列(使用 a 设置QMetaObject
),并且通知更改会传播到视图。还有一些容器助手(开始/结束/迭代器/大小),以便我可以遍历存储的 QObject。 - 我也有一个
TypedObjectListModel<T>
,它提供类型安全(主要是通过覆盖push_back
et.al. 并定义对 T起作用的新iterator
类型)。static_cast
当我只有一种类型的对象时,这一切都很好。我只是创建新类 (f.ex. FruitsModel
,其中包含Q_OBJECT
并继承TypedObjectListModel<Fruit>
。这只能包含 Fruits 或 Fruit-subobjects。
但是,我现在有一个可以在两种不同状态下运行的应用程序。在第二种状态下,模型应该只包含 Apples,而不是 Bananas(或 Fruits,这是一个具体的基类)。
所以,我想创建一个ApplesModel
类型,它应该继承FruitsModel
并只是改变 T 的类型。这让我遇到了麻烦,因为我得到了继承钻石OF DEATH:
这在概念上也是错误的,因为 FruitsModel::push_back(Fruit*) 在 ApplesModel 中是非法的。但是,应该可以读取/迭代 Fruits(不仅仅是 Apples)。
此外,我在 FruitsModel ( findFruitById
) 中有一些函数应该被覆盖,并且只返回 ApplesModel 中的 Apples。
在 C++ 中解决这个问题的首选设计模式是什么?
我怀疑(希望)我不是第一个尝试做类似事情的人。
我尝试了很多想法,但我陷入了各种死胡同。你会认为 ObjectListModel 的虚拟继承可以解决这个问题,但后来我得到了这个QObject::findChild
:
上述问题可以通过我自己的 findChild 实现来解决,改用 dynamic_cast,但仍有一些死胡同。
更新
geekp 有以下建议:
从 Fruit 继承 Apple 不打扰 ApplesModel
然后我如何强制只有苹果在 FruitsModel 中?另外,每次我拿一个苹果(作为水果)时,我都需要沮丧。
不要从 FruitsModel 继承(如果你不使用它的方法,你为什么要这样做?)
我正在使用一些方法,尤其是那些用于阅读的方法。
不要从 Apple 的 TypesObjectListModel 继承,只继承 FruitsModel。
与不使用 AppleModel 的缺点相同。
c++ - reinterpret_cast 到 QObject 的 subling
我有某种对象工厂(基于模板),这对我的目的非常有用。但是现在我尝试使用派生自 QObject 和纯抽象类(接口)的类,并且我遇到了奇怪的运行时错误。
这里是这个类的简单图(Derived)
及其在derived.cpp中的实现:
当我尝试将 void 指针强制转换为接口时,我会得到意想不到的(对我而言)行为,它可能是运行时错误,或其他方法调用(它取决于类的大小)。
你能解释一下为什么我不能将 void 指针转换为接口吗?有什么解决方法吗?
感谢您的回复