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

时间:2014-02-13 09:02:58

标签: c++ performance qt parent

我在Qt中有一个奇怪的行为,我想知道为什么会发生这种情况,如果有人能向我澄清这一点,那将是非常受欢迎的。

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

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

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

要添加一件事,在mainWindow的构造函数中,对象被移动到另一个线程。当我触发对象处理例程时,GUI恢复生机......不像parent为0时那么快,但速度要快得多。

有谁知道为什么会这样?我没有使用父母做任何事情,所以这必须是Qt的内部工作。

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

1 个答案:

答案 0 :(得分:2)

如果对象具有父对象,则无法将对象移动到该线程。文档:The object cannot be moved if it has a parent

如果您尝试这样做,也应该收到警告消息。如果您查看QObject::moveToThread source code,您会看到以下几行:

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