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