Я хотел бы сохранить содержимое QTreeWidget в базе данных MySQL.
SQL для описания таблицы:
CREATE TABLE category (
id int not null,
parentId int,
name varchar(1024), );
Где parentId равновнешний ключ, который ссылается на id из той же таблицы.(предназначено для самостоятельного объединения)
Используя QtCreator, следующий код работает нормально:
int FactsBuilder::findChildren( QTreeWidgetItem *node, int top )
{
for( int i = 0; i < node->childCount(); ++i )
{
QTreeWidgetItem *item = node->child(i);
qDebug() << "Child: " << top++ << " - " << item->text(0);
if(item->childCount() > 0 ) {
this->findChildren(item, top++ );
}
}
return top;
}
void FactsBuilder::updateCatSQL()
{
int count = 1;
for( int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i )
{
QTreeWidgetItem *item = ui->treeWidget->topLevelItem( i );
qDebug() << "Item Number: " << count++ << " - " << item->text(0);
if(item->childCount() > 0 ) {
count = this->findChildren( item, count);
}
}
}
пример вывода:
Top: 1 - "foo"
Top: 2 - "bar"
Child: 3 - "beer"
Child: 4 - "ice"
Top: 5 - "bla"
Top: 6 - "baz"
У верхних элементов нетparent, поэтому в таком случае столбец parentId в базе данных MySQL будет содержать NULL.
В этом случае QTreeWidgetItems с "beer" и "ice", хранящимися в его текстовом атрибуте, приведет кпри сохранении «2» в столбце parentId базы данных.Потому что они организованы в QTreeWidgetItem с «баром», хранящимся в его текстовом атрибуте.
Первый регистр
За исключением случаев, когда QTreeWidgetItems со «ice» будеторганизованный в QTreeWidgetItem с «пивом», хранящимся в его текстовом атрибуте.
В таком случае я бы ожидал «2» и «3» в столбцах parentId базы данных.
Второй случай