使用本教程中的TreeModel: http://qt-project.org/doc/qt-4.8/itemviews-simpletreemodel.html
此版本有效(显示树):
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWin;
QFile file("default.txt");
file.open(QIODevice::ReadOnly);
TreeModel model(file.readAll());
file.close();
QTreeView *treeView = new QTreeView(mainWin.splitter);
treeView->setModel(&model);
mainWin.show();
return app.exec();
}
class MainWindow: public QMainWindow {
QSplitter* splitter;
public:
MainWindow() : QMainWindow() {
splitter = new QSplitter(Qt::Horizontal, this);
splitter->setMinimumSize(1000,1000);
}
};
而且这个不起作用:
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滥用/未定义的行为?
答案 0 :(得分:1)
我认为"不起作用"你的意思是树视图保持空白。
您在堆栈上创建TreeModel模型。这意味着它将在块结束时被销毁。在第一种情况下,这不是问题,因为在应用程序退出之前不会退出main()(即app.exec()返回)。
在第二种情况下,这是一个问题,因为模型将立即在MainWindow构造函数的末尾被破坏,即在窗口甚至可见之前立即销毁。
您必须在堆上创建模型(不要忘记内存管理然后 - 将主窗口(this
)作为父窗口传递)或将其设置为成员变量。