问题标签 [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.

0 投票
2 回答
1107 浏览

c++ - Qt 接口类

我怎样才能创建一个接口类,像这样:

和派生类

当我从这个类继承时,我收到一个错误,提到模棱两可的转换。我知道这是编译器的正确行为,但是我怎样才能为我的未来类获取接口插槽?也许我必须使用Q_DECLARE_INTERFACE宏?

0 投票
1 回答
169 浏览

c++ - 如果从 QObject 派生的类的构造函数抛出,会发出 destroy() 吗?

我到处都看到了如下的 Qt GUI 语法:

我一直想知道如果发生异常,这是否会泄漏,因为我作为按钮和布局的父级提供的“this”没有完全构建,因此它可能不会破坏它的子级。

我在 MSVC2010 Qt4.8.3 中进行了尝试,看起来一旦完全创建了基本 QObject 类(当然首先完成),就可以将“this”传递给构造函数中的其他对象,它们将被销毁正确。

我还没有在 Qt 文档中找到可以保证这一点的地方,有人可以指出我,这样我就可以保证这在未来不会改变?

0 投票
1 回答
3217 浏览

c++ - 宏和包含的 QObject 错误

我想在我的程序中使用信号和插槽,为此我被告知需要添加 Q_OBJECT,如下所示。

好吧,我有一堂课:

这会给出一个错误,上面写着“Q_OBJECT 没有命名类型”。如果我添加 #include 它会给出错误“未定义的对 A 的 vtable 的引用”

那么这样做的正确方法是什么?

0 投票
1 回答
15439 浏览

c++ - 在 Qt 中序列化我的自定义类

我使用读/写 QObjects 是真的吗?我用它序列化一个类,但是反序列化它不是原始类!

我能做些什么?

这是我的基类标题:

.cpp 是:

我有一个从 base 继承的学生类:

这是我的主要内容:

这是我的输出:

0 投票
2 回答
446 浏览

c++ - 两个QObject的赋值

我有两个类名“mamad”和“student”,它们都继承自我的类“Base”,而“Base”继承自 QObject

在学生班中,我有一个字段:“主题”,它是一个 mamad,我有一个函数(setsubject),它采用一个新主题并将新主题复制到主题。

但我有一个错误:

我该如何解决?

这是我的妈妈课:

这是我的学生班:

我必须说我的getsubject函数也有这个问题,我不知道如何解决。?

请,请,帮助我

0 投票
2 回答
872 浏览

c++ - 使用 QObject 属性的指针

自从我学习 Qt 以来,我一直对以下事实感到困惑:在我读过的文档和书籍中,它们使用作为 QObject 子类实例的属性的指针,例如小部件。

我知道 QObjects 会删除他们的孩子,但我们不应该避免使用指针,除非真的有必要吗?

这是一个我不使用指针的工作示例:

小部件.h 文件:

和 Widget.cpp 文件:

这里唯一的区别是我必须在 Widget.h 文件中包含标题,这会是使用指针的原因吗?

我想补充一点,我在 StackOverflow 上看到了一些类似的问题,但答案是小部件应该存在于函数调用之间,但是当将它们用作属性时,这是在这里实现的。

0 投票
24 回答
91050 浏览

c++ - 未解析的外部符号“public: virtual struct QMetaObject const * __thiscall Parent

我从 QObject 继承了一个类:

但是当我写:

我收到以下错误:

0 投票
1 回答
304 浏览

qt - 强制javascript重新评估信号?

所以我有以下情况:

QML 文件:

JavaScript 文件 (Script.js):

假设我在 SomeQtObject 中有一些信号,基于这些信号 getSource 应该重新评估。如何将这些信号绑定到 javaScript getSource 函数,以便在每次发出这些信号时重新评估?

0 投票
2 回答
259 浏览

c++ - 如果包含的对象也继承,我如何定义相互继承的容器?(以 QObject 为基础)

背景:

  • 我有我的类ObjectListModel,它继承QAbstractListModel并包含一个QObjectList. 对象是行,它们的属性是列(使用 a 设置QMetaObject),并且通知更改会传播到视图。还有一些容器助手(开始/结束/迭代器/大小),以便我可以遍历存储的 QObject。
  • 我也有一个TypedObjectListModel<T>,它提供类型安全(主要是通过覆盖push_backet.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 的缺点相同。

0 投票
3 回答
551 浏览

c++ - reinterpret_cast 到 QObject 的 subling

我有某种对象工厂(基于模板),这对我的目的非常有用。但是现在我尝试使用派生自 QObject 和纯抽象类(接口)的类,并且我遇到了奇怪的运行时错误。

这里是这个类的简单图(Derived)

及其在derived.cpp中的实现:

当我尝试将 void 指针强制转换为接口时,我会得到意想不到的(对我而言)行为,它可能是运行时错误,或其他方法调用(它取决于类的大小)。

你能解释一下为什么我不能将 void 指针转换为接口吗?有什么解决方法吗?

感谢您的回复