我在Qt中有一个奇怪的行为,我想知道为什么会发生这种情况,如果有人能向我澄清这一点,那将是非常受欢迎的。
我有一个属于mainWindow的对象,当我在mainWindow的初始化列表中构造这个对象时,我发送0作为父对象,程序运行得很快,应该如此。
但是如果我在构造函数中传递this
,使主窗口成为对象的父窗口,则程序运行得非常慢!
我的意思是,GUI运行缓慢,按钮需要时间来响应。没有正在处理或执行,因为处理只是在我点击某些内容时开始,但按钮仍然需要时间来按下或突出显示。
要添加一件事,在mainWindow的构造函数中,对象被移动到另一个线程。当我触发对象处理例程时,GUI恢复生机......不像parent
为0时那么快,但速度要快得多。
有谁知道为什么会这样?我没有使用父母做任何事情,所以这必须是Qt的内部工作。
我会在这里发布我的代码,但它很大,我不知道哪个部分与此相关。
答案 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;
}