Вопрос очень простой... но я все хожу вокруг да около и все никак не могу найти ответ... уже с этими индексами всю голову себе сломал... подскажите пжалста как быть... вопрос такой... Есть модель QStandardItemModel... из таблицы в БД я беру данные и строю из них дерево.. на это внимание не обращайте, это просто к сведению... Дело в том, что вложенность то будет наращиваться... и мне нужно чтобы первая колока была "data" а вторая "id"... в одну строку чтобы оно было.... ну блин уже пересмотрел примеров вагон и все никак не сложу из них одного нормального решения... подскажите кто...
QSqlQuery *pQuery = new QSqlQuery(QSqlDatabase::database("test"));
pQuery->prepare("SELECT id, data FROM t_groups;");
pQuery->exec();
m_pModel = new QStandardItemModel(this);
int i = 0;
while(pQuery->next()){
QStandardItem *pItem = new QStandardItem(pQuery->value(1).toString());
m_pModel->appendRow(pItem);
QStandardItem *pItem2 = new QStandardItem(pQuery->value(0).toString());
QList<QStandardItem*> lst;
lst<<pItem2;
m_pModel->insertColumn(1,lst);
i++;
}
delete pQuery;
на картинке виден результат выполнения этого обрыка кода... я понимаю что нужно перемещаться еще и по строкам... но все никак не попаду...
скомпилируй это - я так понял, что тебе такая штука нужна
QStandardItemModel * model = new QStandardItemModel();
model->setColumnCount(2);
QStandardItem *parentItem = model->invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(0,2); //сказали, что колонок две
parentItem->appendRow(item);
parentItem = item;
model->setData(item->index(),QString("item %0").arg(i)); //инфа для первой колонки
model->setData(item->index().sibling(0,1),QString("123")); //инфа для второй
}
ui->treeView->setModel(model);
QStandardItemModel * model = new QStandardItemModel();
model->setColumnCount(2);
QStandardItem *parentItem = model->invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(0,2); //сказали, что колонок две
parentItem->appendRow(item);
parentItem = item;
model->setData(item->index(),QString("item %0").arg(i)); //инфа для первой колонки
model->setData(item->index().sibling(0,1),QString("123")); //инфа для второй
}
ui->treeView->setModel(model);
void MainWindow::setupInterface()
{
setupUi(this);
m_pModel = new QStandardItemModel(this);
m_pModel->invisibleRootItem()->insertColumns(0,2);
m_pModel->setHorizontalHeaderLabels(QStringList()<<"data"<<"id");
QSqlQuery *pQueryFirstLevel = prepareQuery(0);
//******* 1 LEVEL *******//
int i = 0;
while(pQueryFirstLevel->next()){
QStandardItem *pFirstLevelItem = new QStandardItem;
addItem(m_pModel->invisibleRootItem(),pFirstLevelItem,pQueryFirstLevel,i);
//******* 2 LEVEL *******//
int j = 0;
pFirstLevelItem->insertColumns(0,2);
QSqlQuery *pQuerySecLevel = prepareQuery(pQueryFirstLevel->value(0).toInt());
while(pQuerySecLevel->next()){
QStandardItem *pSecondLevelItem = new QStandardItem;
addItem(pFirstLevelItem,pSecondLevelItem,pQuerySecLevel,j);
//******* 3 LEVEL *******//
int k = 0;
pSecondLevelItem->insertColumns(0,2);
QSqlQuery *pQueryThrdLevel = prepareQuery(pQuerySecLevel->value(0).toInt());
while(pQueryThrdLevel->next()){
QStandardItem *pThirdLevelItem = new QStandardItem;
addItem(pSecondLevelItem,pThirdLevelItem,pQueryThrdLevel,k);
//******* 4 LEVEL *******//
int l = 0;
pThirdLevelItem->insertColumns(0,2);
QSqlQuery *pQueryFourLevel = prepareQuery(pQueryThrdLevel->value(0).toInt());
while(pQueryFourLevel->next()){
QStandardItem *pFourthLevelItem = new QStandardItem;
addItem(pThirdLevelItem,pFourthLevelItem,pQueryFourLevel,l);
l++;
}
k++;
delete pQueryFourLevel;
//******* 4 LEVEL *******//
}
j++;
delete pQueryThrdLevel;
//******* 3 LEVEL *******//
}
i++;
delete pQuerySecLevel;
//******* 2 LEVEL *******//
}
delete pQueryFirstLevel;
//******* 1 LEVEL *******//
mf_treeView->setModel(m_pModel);
}
void MainWindow::addItem(QStandardItem *pOwnerItem, QStandardItem *pNewItem, QSqlQuery *pQuery, int i)
{
pOwnerItem->appendRow(pNewItem);
m_pModel->setData(m_pModel->index(i,0,pOwnerItem->index()),pQuery->value(1).toString());
m_pModel->setData(m_pModel->index(i,1,pOwnerItem->index()),pQuery->value(0).toString());
}
QSqlQuery *MainWindow::prepareQuery(int nID)
{
QSqlQuery *pQuery = new QSqlQuery(QSqlDatabase::database("test"));
pQuery->prepare("SELECT id, data FROM t_groups WHERE id_owner = :id;");
pQuery->bindValue(":id", nID);
pQuery->exec();
return pQuery;
}
void MainWindow::slotDebug(QModelIndex index)
{
QString str = m_pModel->data(index).toString();
lineEdit->setText("Group name - \"" + str + "\" id - \"");
}
QStandardItem *item = m_pModel->itemFromIndex(index);
QModelIndex idx = m_pModel->index(item->row(),1,item->index());
qDebug()<<item->row()<<idx.data().toString();
bahek3, а если бы уровней было этак с сотню - для каждого бы копипаст был ? В цикле ещё приемлимо. А лучше, ИМХО, - рекурсия. Вообще, дерево и рекурсия - родные брат и сестра )))
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)