В этой функции я пытаюсь соединить каждый 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();
}
}
}
есть идеи ?? 🙂
Не совсем уверен, что вы после, но вот мой вклад:
Добавьте строку после:
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();
}
}
}
Надеюсь, поможет.
Других решений пока нет …