我正在尝试将 MySQL 表放入treeView
.
每个条目在数据库中都有三个值 - id
、text
、parentId
。这treeView
需要是可编辑的,所以我真的很喜欢这种QSqlTableModel
方法,因为已经内置了保存回数据库的功能。
现在,treeView
当然,在同一行中显示所有条目,我需要一个层次结构。在保持编辑和保存功能的同时,构建此层次结构的最佳方式是什么?(我正在使用 MySQL。)
主窗口.h
private: QSqlTableModel* goalModel;
主窗口.cpp
(这会形成一个平面表层次结构。根据在另一个表中单击哪个条目来过滤表)
void MainWindow::on_tableViewGoals_clicked(const QModelIndex &index)
{
goalModel = new QSqlTableModel(this);
goalModel->setTable("goals");
//Gets the id from the clicked entry to use as filter
QString idGoals = index.sibling(row,0).data().toString();
goalModel->setFilter( "id_goals=" + idGoals );
goalModel->setEditStrategy(QSqlTableModel::OnRowChange);
goalModel->select();
ui->treeView->setModel(goalModel);
...
我试过这个。这是错误的,但我真的不知道为什么。(第三列包含 parentId 值,如果条目有)
for (int row = 0; row < goalModel->rowCount(); ++row)
{
//if the entry has a value over 0 in the parentId column
if (goalModel->index(row,2).data().toInt() > 0)
{
//get number in column 2
int parentId;
parentId = goalModel->index(row,2).data().toInt();
QModelIndex newChild = goalModel->index(row,0);
//find QModelIndex row with matching number in column 0
for (int row = 0; row < goalModel->rowCount(); ++row)
{
if (goalModel->index(row,0).data().toInt() == parentId )
{
//make this entry that entry's child
QModelIndex newParent = goalModel->index(row,0);
newChild = goalModel->index(0,0,newParent);
}
}
}
}
所有索引都已经创建,因此无需创建新索引,只需为所有拥有索引的人分配父级即可。如何最好地做到这一点?