kichi
11th January 2010, 10:44
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() ?
#include <QtGui/QApplication>
#include <QtCore/QModelIndex>
#include <QtGui/QStandardItem>
#include <QtGui/QStandardItemModel>
#include <QTreeView>
#include <QtDebug>
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
QStandardItemModel model;
QTreeView treeView;
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)
model.insertRow(0, new QStandardItem("Child Item"));
QModelIndex childItemIndex = model.index(0, 0, QModelIndex());
bool isSuccess = false;
if (childItemIndex.isValid()) {
isSuccess = model.insertRow(0, childItemIndex); // make a grandchild, but the item does not appear
}
qDebug() << "isSuccess : " << isSuccess; // true
childItemIndex = model.index(0, 0, QModelIndex());
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.
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() ?
#include <QtGui/QApplication>
#include <QtCore/QModelIndex>
#include <QtGui/QStandardItem>
#include <QtGui/QStandardItemModel>
#include <QTreeView>
#include <QtDebug>
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
QStandardItemModel model;
QTreeView treeView;
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)
model.insertRow(0, new QStandardItem("Child Item"));
QModelIndex childItemIndex = model.index(0, 0, QModelIndex());
bool isSuccess = false;
if (childItemIndex.isValid()) {
isSuccess = model.insertRow(0, childItemIndex); // make a grandchild, but the item does not appear
}
qDebug() << "isSuccess : " << isSuccess; // true
childItemIndex = model.index(0, 0, QModelIndex());
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.