Selection of QTreeWidgetItem

Selection of QTreeWidgetItem

本文关键字:QTreeWidgetItem of Selection      更新时间:2023-10-16

在这个函数中,我试图将每个QTreeWidgetItem与其相应的查询连接起来,一旦我选择了一个项目,就会显示一个在表视图模型中具有查询结果的Dock小部件。

我想要的是,当我选择一个新项目时,显示的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();
}
}
   }

希望能有所帮助。