MySQL テーブルを に入れようとしていますtreeView
。
各エントリには、データベースに 、 、 の 3 つの値が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);
...
私はこれを試しました。それは間違っていますが、その理由はよくわかりません。(3 番目の列には、エントリにある場合、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);
}
}
}
}
すべてのインデックスは既に作成されているため、新しいインデックスを作成する必要はありません。親を持つすべての人に親を割り当てるだけです。どのように行うのが最善ですか?