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

标签 c++ performance qt parent

我在 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/

相关文章:

c++ - 为什么 PRIVATE 成员函数不能成为另一个类的友元函数?

c++ - 变量会影响性能吗?

c# - 哪种向 ASP.NET Dictionary 类添加项目的方法效率更高?

c++ - 基于嵌套类型的模板函数选择

c++ - 调用单例库

c++ - 比较 vector 并删除所有元素都已在另一个 vector 中的 vector

Jquery高效且性能好

c++ - 如何将 QGraphicsSimpleTextItem 放在 QGraphicsLineItem 的中间?

qt - 使用特定 QT 版本运行二进制文件 - 不能混合不兼容的 Qt 库

java - Qt中如何调用context.getExternalFilesDir