Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将QTreeView添加到QMainWidow-奇怪的行为_Qt - Fatal编程技术网

将QTreeView添加到QMainWidow-奇怪的行为

将QTreeView添加到QMainWidow-奇怪的行为,qt,Qt,使用本教程中的树模型: 此版本有效(显示树): 这一个不起作用: int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow mainWin; mainWin.show(); return app.exec(); } class MainWindow: public QMainWindow { QSplitter* splitter; public: M

使用本教程中的树模型:

此版本有效(显示树):

这一个不起作用:

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MainWindow mainWin;
    mainWin.show();
    return app.exec();
}

class MainWindow: public QMainWindow {
    QSplitter* splitter;
public:
    MainWindow() : QMainWindow() {
        splitter = new QSplitter(Qt::Horizontal, this);
        splitter->setMinimumSize(1000,1000);

        QFile file("default.txt");
        file.open(QIODevice::ReadOnly);
        TreeModel model(file.readAll());
        file.close();

        QTreeView *treeView = new QTreeView(splitter);
        treeView->setModel(&model);

    }
};
这里发生了什么?是否存在API误用/未定义的行为

我假设使用“不工作”表示树视图保持为空

您可以在堆栈上创建TreeModel模型。这意味着它将在街区的尽头被摧毁。在第一种情况下,这不是问题,因为main()不会在应用程序退出之前退出(即app.exec()返回)

在第二种情况下,这是一个问题,因为模型将在主窗口构造函数结束时立即销毁,即在窗口甚至可见之前立即销毁。 您必须在堆上创建模型(不要忘记内存管理-将主窗口(
this
)作为父窗口传递),或者将其作为成员变量

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MainWindow mainWin;
    mainWin.show();
    return app.exec();
}

class MainWindow: public QMainWindow {
    QSplitter* splitter;
public:
    MainWindow() : QMainWindow() {
        splitter = new QSplitter(Qt::Horizontal, this);
        splitter->setMinimumSize(1000,1000);

        QFile file("default.txt");
        file.open(QIODevice::ReadOnly);
        TreeModel model(file.readAll());
        file.close();

        QTreeView *treeView = new QTreeView(splitter);
        treeView->setModel(&model);

    }
};