问题标签 [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 投票
3 回答
473 浏览

c++ - 来自 QObject::connect 的详细信息

如果发生故障,有没有办法从中获取详细的故障信息QObjet::connect

返回的布尔值不提供有关失败原因的任何信息。

我希望异常在 C++ 中能像在 Java 中一样被广泛使用。

0 投票
2 回答
5698 浏览

qt - 在 Qt 中,如何使用具有多重继承的 Q_OBJECT 插槽和信号?

我浏览了相关的问题,找不到任何能准确解决我所说的问题的东西,所以让我来描述一下。

我有一个类,假设 foo 需要有自己的插槽和信号,但还需要从 QXmlDefaultHandler 继承(听起来很奇怪,但我在尝试使用 QHttp 将网站直接读入 QBuffer 时遇到了这种情况)。

这段代码,如果伴随着一个 cpp 将 bar 连接到其他地方的信号,将不会编译。您将收到有关 QObject 的某些成员不是 QXmlDefaultHandler 成员的错误。此外,您不能移动 Q_OBJECT,否则您会因为未实现某些东西而收到 vtable 错误(继续!试试吧!)。

请查看我对(非常简单的)修复的回答。如果我认为你解释得比我好,我会接受投票给你作为接受的答案。

编辑:对于您的 c++ 和 Qt 兽医,如果您能更好地解释它,请发布答案。我花了很多时间查找此信息,所以如果您能做得比我更好,请帮助其他人。

0 投票
1 回答
21458 浏览

qt - 在 Qt 中检查 QObject 派生类类型的正确方法

假设我有两个课程:

那我去

现在,我如何确保“a”是 A 类的实例,而“b”是 B 类的实例?

目前我做这样的事情:

有没有更好的办法?

0 投票
2 回答
3519 浏览

qt - 在Qt的组合框中添加QObject

我有一个我创建的自定义类,比如 MyClass。现在如何在下面的组合框中添加对 MyClass 的引用作为第二个参数的引用:

this->ui->comboBox->addItem("item-1", );

目的是当项目更改甚至被触发时,我想获取 MyClass 的特定类实例并相应地进行处理。

0 投票
5 回答
2210 浏览

qt - QObject 孩子的顺序(策略问题)

对于我的一个项目,我有一个 QObject 派生对象树,它利用 QObject 的父/子功能来构建树。

这非常有用,因为我使用信号和槽,使用 Qt 的受保护指针并期望父对象在删除子对象时删除它们。

到现在为止还挺好。不幸的是,现在我的项目需要我管理/更改孩子的顺序。QObject 没有提供任何改变其子级顺序的方法(例外:QWidget 的 raise() 函数——但在这种情况下这没有用)。所以现在我正在寻找一种控制孩子顺序的策略。我有一些想法,但我不确定它们的优缺点:



选项 A:自定义排序索引成员变量

使用int m_orderIndex成员变量作为排序键并提供一个sortedChildren()方法,该方法返回按此键排序的 QObject 列表。

  • 易于实施到现有的对象结构中。
  • QObject::children()方法被覆盖时会出现问题 - 当项目的顺序改变时会导致循环期间出现问题,也比默认实现更昂贵。
  • 如果所有排序键都相等或 0/默认值,则应回退到 QObject 对象顺序。

选项 B:子项冗余列表

在 a 中维护一个冗余子级列表QList,并在创建和销毁时将子级添加到其中。

  • 需要昂贵的跟踪添加/删除的对象。这基本上会导致第二个孩子/父母跟踪和大量信号/插槽。QObject 已经在内部完成了所有这些操作,因此再次执行此操作可能不是一个好主意。也感觉像改变孩子的顺序这样简单的事情增加了很多臃肿。
  • 良好的灵活性,因为可以根据需要修改子项的 QList。
  • 允许一个孩子多次出现在 QList 中,或者根本不出现(即使它可能仍然是 QObject 的一个孩子)

选项 C:...?

任何想法或反馈,尤其是来自已经在自己的项目中解决此问题的人,都将受到高度赞赏。新年快乐!

0 投票
1 回答
3017 浏览

qt - 获取应用程序中创建的所有 QObject 的列表

要获取应用程序中创建的所有 QWidget 的列表,我们可以简单地调用QApplication::allWidgets().

我已经阅读了文档,但我还没有找到类似的东西来获取所有 QObjects 的列表。如果一个应用程序创建了不是 QWidgets 的独立 QObjects,我就没有这样的功能可以使用。

有没有办法获得这样的名单?

0 投票
3 回答
3932 浏览

qt4 - 有没有办法在 QObject 中的属性更改时得到通知?

首先,我使用的是 Qt 4 库和 C++。

当属性(动态或其他)发生变化时,是否有办法通知(信号、事件、?)QObject

我无法修改QObject该类,因为它是 Qt4 库的一部分。QObject 关于这里的更多信息。

0 投票
3 回答
1438 浏览

qt - Qt:以正确的方式设置我自己的 QWidget

在 Qt 中,我正在尝试设置自己的 QWidget,因此由于内存管理和其他事情,一切都应该正常工作。但我似乎无法用指针、堆和堆栈来解决问题。我有我的小部件 MyWidget,它有一个带有一些对象的 QList。我无法弄清楚如何正确设置所有内容。

您可以在下面看到我的代码,对此我有一些疑问:

  1. instace 变量列表是在堆上创建的,在栈上创建会更好吗?

  2. 在我的列表中,我有指针,在堆栈上创建对象并将其附加到列表中会更好吗?(所以我在列表中根本没有指针)

  3. 当我将对象附加到列表时,它们会自动将列表作为其父级吗?那么当我删除列表时,列表中的所有对象都会被删除吗?

  4. 我尝试使用的 for each 循环不起作用,我得到“此操作需要指针/数组类型而不是 'int'”

  5. 在我的代码中,我想创建其他小部件,将列表中的对象作为参数。这是像我一样做的正确方法吗?MyOtherWidget 的实例方法如下所示: MyOtherWidget(MyObject *myObject, QWidget *parent)

谢谢你的帮助!我是 Qt 和 C++ 的新手,所以如果你能引导我朝着正确的方向前进,那就太好了。我怎样才能以正确的方式设置它以使其变得容易,不要出现内存泄漏并根据需要使用尽可能少的内存。你将如何设置相同的东西?

这是我的代码:

MyWidget.h:

我的小部件.cpp:

0 投票
9 回答
41053 浏览

c++ - Qt 链接器错误:“未定义对 vtable 的引用”

这是我的标题:

这是我的课:

我收到链接器错误:

  • 这意味着我有一个未实现的虚拟方法。但是我的课上没有虚拟方法。
  • 我注释掉了向量,认为这是原因,但错误并没有消失。
  • Message是一个复杂的struct,但即使使用int而不是解决问题。
0 投票
1 回答
2033 浏览

c++ - 从 QObject 继承时可以使用 QSharedData 吗?

如何在 Qt 中隐藏私有实现(隐式共享):

我的 Employee.h 标头中有以下 Employee.cpp :

但是当我将 EmployeeData 移动到私有部分时,比如 Employee.cpp,我得到:错误:无效使用不完整类型“struct EmployeeData”</p>

但是,如果我将定义更改为此它可以正常工作:

因此,我可以在继承 QObject 的同时使用 QSharedData 吗?