QStandardItemModel's insertRow() did't make a grandchild item in QTreeView
When I intended to write a small code using QTreeView and QStandardItemModel.
I encountered a problem.
When I made a grandchild item, using QStandardItemModel::insertRow(int row, const QModelIndex & parent = QModelIndex()),
the item did not appeared in the tree view.
In the following code, Case1 worked good.
But, contrary to my expectation, Case2 did not work.
Is it correct to make a grandchild item, using QStandardItemModel::insertRow() ?
Code:
#include <QtGui/QApplication>
#include <QtCore/QModelIndex>
#include <QtGui/QStandardItem>
#include <QtGui/QStandardItemModel>
#include <QTreeView>
#include <QtDebug>
int main(int argc, char *argv[])
{
treeView.setModel(&model);
// (Case 1)
// QStandardItem* rootItem = model.invisibleRootItem();
// rootItem->insertRow(0, new QStandardItem("Child Item"));
// QStandardItem* childItem = rootItem->child(0, 0);
// if (childItem)
// childItem->insertRow(0, new QStandardItem("Grandchild Item"));
// (Case 2)
bool isSuccess = false;
if (childItemIndex.isValid()) {
isSuccess = model.insertRow(0, childItemIndex); // make a grandchild, but the item does not appear
}
qDebug() << "isSuccess : " << isSuccess; // true
qDebug() << "childItemIndex.isValid : " << childItemIndex.isValid(); // true
QModelIndex grandchildItemIndex
= model.
index(0,
0, childItemIndex
);
qDebug() << "grandchildItemIndex.isValid() : " << grandchildItemIndex.isValid(); // false
treeView.show();
return application.exec();
}
I'm sorry in poor English.
Re: QStandardItemModel's insertRow() did't make a grandchild item in QTreeView
You need to insert a column as well. The insertRow which takes a QStandardItem does this automatically.
Code:
if (childItemIndex.isValid()) {
isSuccess = model.insertRow(0, childItemIndex); // make a grandchild, but the item does not appear
isSuccess = model.insertColumn(0, childItemIndex); // Need this...
}
Re: QStandardItemModel's insertRow() did't make a grandchild item in QTreeView
Quote:
Originally Posted by
numbat
You need to insert a column as well. The insertRow which takes a QStandardItem does this automatically.
Code:
if (childItemIndex.isValid()) {
isSuccess = model.insertRow(0, childItemIndex); // make a grandchild, but the item does not appear
isSuccess = model.insertColumn(0, childItemIndex); // Need this...
}
Your advice has solved the problem.
Thank you very much.