void <НазваниеТвоегоКласса>::<НазваниеТвоегоСлота1>() //думаю это будет слот, чтоб была возможность обновлять дерево (вдруг у тебя программа будет многопользовательская){ disconnect(ui.treeWidget,SIGNAL(itemExpanded(QTreeWidgetItem *)),this,SLOT(<НазваниеТвоегоСлота2>(QTreeWidgetItem *))); ui.treeWidget->clear(); QSqlQueryModel *sql = new QSqlQueryModel(this); sql->setQuery("select distinct text, id_b, id from A order by text",QSqlDatabase::database()); if (sql->lastError().isValid()) QMessageBox::warning(this, "Соединение с SQL-сервером","Обнаружена ошибка соединения:\n"+sql->lastError().text(),QMessageBox::Ok); else { ui.treeWidget->setColumnCount(3); ui.treeWidget->setColumnHidden(1,true); ui.treeWidget->setColumnHidden(2,true); QStringList sl; sl<<"Название"<<"PKeyB"<<"PKeyA"; ui.treeWidget->setHeaderLabels(sl); for (int j=0; j<sql->rowCount(); j++) { QTreeWidgetItem *twihead = new QTreeWidgetItem(ui.treeWidget); for (int i=0; i<ui.treeWidget->columnCount(); i++) { twihead->setText(i, sql->record(j).value(i).toString()); if (!twihead->text(1).isEmpty()) twihead->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); } } } for (int i=0; i<ui.treeWidget->columnCount(); i++) ui.treeWidget->resizeColumnToContents(i); connect(ui.treeWidget,SIGNAL(itemExpanded(QTreeWidgetItem *)),this,SLOT(<НазваниеТвоегоСлота2>(QTreeWidgetItem *)));}
void <НазваниеТвоегоКласса>::<НазваниеТвоегоСлота2>(QTreeWidgetItem *twi){ if (twi->childCount()==0) { QSqlQueryModel *sql = new QSqlQueryModel(this); sql->setQuery("select distinct t1.text, t1.id, case when t2.id is null then '0' else '1' end from B t1 left join B t2 on t2.parent = t1.id where t1.parent = "+twi->text(1)+" order by t1.text",QSqlDatabase::database()); if (sql->lastError().isValid()) QMessageBox::warning(this, "Соединение с SQL-сервером","Обнаружена ошибка соединения:\n"+sql->lastError().text(),QMessageBox::Ok); else { for (int i=0; i<sql->rowCount(); i++) { QTreeWidgetItem *twic = new QTreeWidgetItem(twi); for (int j=0; j<2; j++) twic->setText(j, sql->record(i).value(j).toString()); if (sql->record(i).value(2).toBool()) twic->setChildIndicatorPolicy (QTreeWidgetItem::ShowIndicator); } } } ui.treeWidget->resizeColumnToContents(0);}