gpt4 book ai didi

c++ - 如果对象父对象是窗口,Qt 程序运行缓慢

转载 作者:行者123 更新时间:2023-11-28 02:57:01 25 4
gpt4 key购买 nike

我在 Qt 中遇到了一个奇怪的行为,我想知道为什么会这样,如果有人能向我澄清这一点,我将非常欢迎。

我有一个属于 mainWindow 的对象,当我在 mainWindow 的初始化列表中构造这个对象时,我将 0 作为父对象发送,程序运行得很快,正如它应该的那样。

但是如果我在构造函数中传递 this,使主窗口成为对象的父窗口,程序运行速度会非常慢!

我的意思是,GUI 运行缓慢,按钮需要时间来响应。没有任何东西正在处理或执行,因为当我点击某些东西时处理才开始,但按钮仍然需要时间才能被按下或突出显示。

要补充一点,在 mainWindow 的构造函数中,对象被移动到另一个线程。当我触发对象处理例程时,GUI 恢复生机……不像 parent 为 0 时那样快,但快得多。

有人知道为什么会这样吗?我没有使用父对象做任何事情,所以这一定是 Qt 的内部工作原理。

我会在这里发布我的代码,但它很大,我不知道哪一部分与此相关。

最佳答案

如果对象有父对象,则您不应该将它们移动到线程中。文档:The object cannot be moved if it has a parent .

如果您尝试这样做,您还应该收到一条警告消息。如果您查看 source codeQObject::moveToThread 中,您会发现以下几行:

if (d->parent != 0) {
qWarning("QObject::moveToThread: Cannot move objects with a parent");
return;
}

关于c++ - 如果对象父对象是窗口,Qt 程序运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21749419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com