我是QT和C ++的新手,我正在尝试将QTreeView绑定到QStandardItemModel。下面的代码编译,但小部件没有填充childItem。谁知道为什么?
#include <QStandardItemModel>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTreeView *qtree = ui->treeView;
QStandardItemModel model;
QStandardItem *item = model.invisibleRootItem();
QStandardItem *childItem = new QStandardItem(QString("child item"));
item->appendRow(childItem);
qtree->setModel( &model );
}
答案 0 :(得分:1)
您创建模型的实例,然后在MainWindow
构造函数返回时立即销毁它。你的模型是一个局部变量!
您希望模型成为窗口小部件中的值成员。我还建议忽略愚蠢的Qt Creator模板代码,不按指针保持ui
成员,但直接按值。额外的指针间接是毫无意义的,过早的悲观化。 15年前,当编译器和磁盘比现在慢1-2个数量级时,这是有道理的。
// mainwindow.h
#include <QMainWindow>
#include "ui_mainwindow.h"
class MainWindow : public QMainWindow {
Ui::MainWindow ui; // by value!
QStandardItemModel model; // by value!
public:
explicit MainWindow(QWidget * parent == nullptr);
// Let the compiler do the hard work: the default destructor is just fine!
}
// mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget * parent) :
QMainWindow{parent}
{
ui.setupUi(this);
auto root = model.invisibleRootItem();
root->appendRow(new QStandardItem{QStringLiteral("child item")});
ui.treeView->setModel(&model);
}
答案 1 :(得分:-1)
我的帖子中的代码不起作用,因为当MainWindow类的构造函数返回时,模型变量被销毁。