Qt的两个QList成员变量导致崩溃

Qt two QList member variables causes crash

所以我不确定这是 Qt 中的错误还是我只是不明白,但我有这个 class:

class myClass : public QDialog, private Ui::myClass
{
    Q_OBJECT

public:
    explicit myClass(QWidget *parent = 0);

private:
    QList<ushort> list1;
    QList<ushort> list2;
}

我通过点击另一个 window 中的一个动作来创建这个 window:

void mainWindow::on_myClassAction_triggered()
{
    myClass *mc = new mc(NULL);
    mc->show();
}

所以现在事情变得奇怪了。即使我不在 myClass 中的任何地方使用 list1 和 list2,当我关闭或有时打开 myClass 时程序也会崩溃。如果我注释掉其中一个或两个,它就会起作用。这是怎么回事??

我正在使用 Qt Creator。我只是重新 运行 QMake,现在它可以工作了。绝对是 Qt/Qt Creator 中的某种错误。

这不是任何类型的错误。这是一个 classic 二进制不兼容问题:您有一些代码依赖于某些 classes 的布局,但过时的 Makefile 没有捕捉到这种依赖性。因此,当您更改 class 的布局时,相关代码不会重新编译。对于 qmake 来说,每次构建它时重新扫描整个项目以查找此类依赖项的成本太高了。当您更改代码以引入此类二进制不兼容性时,您需要重新 运行 qmake

对于小型项目,您可能只是希望始终 重建代码,强制 qmake 重新运行。