1

この関数では、各 QTreeWidgetItem を対応するクエリに接続しようとしています。アイテムを選択すると、テーブルビュー モデルにクエリ結果を持つ Dock ウィジェットが表示されます。

私が欲しいのは、新しいアイテムを選択すると、表示されたドックウィジェットが非表示になり、新しいアイテムが新しい結果とともに表示されることです。私が今まで持っているのは、新しい Dock ウィジェットを選択した各アイテムが表示されることです。ドック ウィジェットを 1 つだけ表示したい。

ここに私の機能があります

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();

}
}
   }

何か案は ??:)

4

1 に答える 1

0

あなたが何を求めているのかよくわかりませんが、ここに私の貢献があります:

次の行を追加します。

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();

}
}
   }

それが役に立てば幸い。

于 2012-10-30T15:01:42.380 に答える