【问题标题】:Setting common parent Qt widget for new widget in separate thread在单独的线程中为新小部件设置公共父 Qt 小部件
【发布时间】:2013-12-28 02:02:39
【问题描述】:

我需要在单独的线程中创建一个小部件并将 MainWindow 设置为父小部件。无法避免创建线程。

在一个新小部件的构造函数中,我指定了一个指向 MainWindow 的指针,但是给出了

QObject::setParent: 无法设置父级,新父级在不同的线程中

如何解决?

附:子小部件可能很多。

【问题讨论】:

  • 是的,我想是的。我将尝试在一个公共线程中创建小部件。问题是怎么做,因为我必须使用一个特殊的框架,而且那些小部件必须是主 UI 的扩展。但这是另一个问题:)

标签: c++ multithreading qt qobject qtcore


【解决方案1】:

您不能在主线程之外创建 UI 小部件

【讨论】:

  • 严格来说,这是不正确的。你可以创建它。主要标准是将它放在同一个线程中。这是否是主要的不是强制性的。
  • 刚刚测试在单独的线程中创建 QWidget 并得到运行时错误(Qt 5.1)
  • 你为什么要测试它?您不能在单独的线程中创建它,但可以在“主”线程之外​​创建它。唯一的标准是两者都相同。详情见我的回答。
【解决方案2】:

这是不可能的。请参阅以下代码参考了解为什么不这样做的详细信息:

QObject source code

您需要特别注意以下警告:

"qWarning("QObject::setParent: 无法设置父级,新父级在不同的线程");"

你根据你的问题在命令行上得到的,所以这都是意料之中的。

正如警告所说,您需要确保育儿发生在父子之间的同一线程中。

无法避免创建线程。如何解决?

恐怕你需要重构代码,要么将它从你的线程中移出到与父线程相同的地方,要么/并且根本没有单独的线程。

根据您问题中的信息,目前无法说更多,因为我们尚未完全了解您的其他线程的功能。

希望这有助于解释它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2019-06-26
    • 1970-01-01
    • 2017-03-02
    • 2019-09-14
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多