Выбор QTreeWidgetItem

В этой функции я пытаюсь соединить каждый QTreeWidgetItem с соответствующим запросом,
как только я выбираю элемент, отображается виджет Dock, который имеет результат запроса в модели табличного представления.

я хочу, чтобы при выборе нового элемента показанный виджет-док скрывался, а новый появлялся с новым результатом. до сих пор у меня есть то, что каждый элемент, который я выбираю, появляется новый виджет Dock. Я хочу видеть только один виджет дока.

вот моя функция

void MainWindow::DocumentTable()
{
tableview = new QTableView;
query = new QSqlQueryModel(this);

foreach(it,treeWidget->selectedItems())
{
for (int col=0; col< it->columnCount(); ++col)
{
qDebug() << col << it->text(col);

QSqlQuery qry;
qry.prepare("select * from document where Folno=:Folno");
qry.bindValue(":Folno", it->text(col));
qry.exec();

query->setQuery(qry);

tableview->setModel(query);
tableview->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableview->show();

Docwidget= new QDockWidget(this);
Docwidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

Docwidget->setWidget(tableview);
addDockWidget(Qt::RightDockWidgetArea,Docwidget);
Docwidget->show();if(!query->submit())
{
qDebug() << "Error " << query->lastError().text();
}

db.close();

}
}
}

есть идеи ?? 🙂

1

Решение

Не совсем уверен, что вы после, но вот мой вклад:

Добавьте строку после:

query = new QSqlQueryModel(this);

затем добавьте это:

QDockWidget * lastDockWidget = NULL;

Добавлять:

if (lastDockWidget != NULL)  // If no null, then
lastDockWidget.hide();   // hide it, delete it, or whatever...

до

Docwidget= new QDockWidget(this);

и это:

lastDockWidget = Docwidget;

сразу после:

Docwidget= new QDockWidget(this);

Результат:

void MainWindow::DocumentTable()
{
tableview = new QTableView;
query = new QSqlQueryModel(this);
QDockWidget * lastDockWidget = NULL; // This was added

foreach(it,treeWidget->selectedItems())
{
for (int col=0; col< it->columnCount(); ++col)
{
qDebug() << col << it->text(col);

QSqlQuery qry;
qry.prepare("select * from document where Folno=:Folno");
qry.bindValue(":Folno", it->text(col));
qry.exec();

query->setQuery(qry);

tableview->setModel(query);
tableview->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableview->show();

if (lastDockWidget != NULL)  // This was added
lastDockWidget.hide();   // This was added
Docwidget= new QDockWidget(this);
lastDockWidget = Docwidget;  // This was added
Docwidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

Docwidget->setWidget(tableview);
addDockWidget(Qt::RightDockWidgetArea,Docwidget);
Docwidget->show();if(!query->submit())
{
qDebug() << "Error " << query->lastError().text();
}

db.close();

}
}
}

Надеюсь, поможет.

0

Другие решения

Других решений пока нет …