【发布时间】:2019-04-19 16:33:56
【问题描述】:
我想将 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"
顶部项没有父项,因此在这种情况下,MySQL 数据库中的 parentId 列将包含 NULL。
在这种情况下,在其文本属性中存储“beer”和“ice”的 QTreeWidgetItems 将导致在数据库的 parentId 列中存储“2”。因为它们是在 QTreeWidgetItem 下组织的,“bar”存储在其文本属性中。
第一种情况
除非带有“ice”的 QTreeWidgetItems 将被组织在带有“beer”的 QTreeWidgetItem 的文本属性中。
在这种情况下,我希望数据库的 parentId 列中有“2”和“3”。
第二种情况
【问题讨论】: