Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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中_Qt - Fatal编程技术网

模型未反映在QTreeView中

模型未反映在QTreeView中,qt,Qt,我是Qt和C++新手,我试图把QTraveVIEW绑定到QStaleItMeMod。下面的代码可以编译,但是小部件没有填充childItem。有人知道为什么吗 #include <QStandardItemModel> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QTreeV

我是Qt和C++新手,我试图把QTraveVIEW绑定到QStaleItMeMod。下面的代码可以编译,但是小部件没有填充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 );

}
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
QTreeView*qtree=ui->treeView;
QS标准模型;
QStandardItem*item=model.invisibleRootItem();
QStandardItem*childItem=新的QStandardItem(QString(“子项”));
项目->追加行(子项目);
qtree->setModel(&model);
}

我帖子中的代码不起作用,因为当MainWindow类的构造函数返回时,模型变量被销毁

创建模型实例,然后在
main窗口
构造函数返回时立即销毁它。你的模型是一个局部变量

您希望模型成为小部件中的值成员。我还建议忽略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);
}