Настройка QSqlTableModel для QTreeView

Я пытаюсь положить таблицу MySQL в treeView,

Каждая запись имеет три значения в базе данных - id, text, parentId, это 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 ответов

Другие вопросы по тегам