为QTreeView调整QSqlTableModel

时间:2016-11-04 20:27:33

标签: c++ mysql qt treeview qsqltablemodel

我正在尝试将MySQL表放入treeView

每个条目在数据库中都有三个值 - idtextparentId。 这个treeView需要是可编辑的,因此我非常喜欢QSqlTableModel方法,因为已经内置了保存回数据库的功能。

现在,treeView显示同一行中的所有条目,当然,我需要一个层次结构。在保持编辑和保存功能的同时,构建此层次结构的最佳方法是什么? (我正在使用MySQL。)

mainwindow.h

private: QSqlTableModel* goalModel;

mainwindow.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);
            }
        }
    }
}

所有索引都已制作好,因此无需制作新索引,只需将父级分配给所有索引即可。怎么做到最好?

0 个答案:

没有答案