1

私のアプリケーションには次のようなコードがあります:

....

QStandardItemModel* authorModel = getAuthorModel(author);

// Create result tab
QTableView* tblView = new QTableView();
tblView->setModel(authorModel);

controller.queryAuthor(author, authorModel);
qDebug() << authorModel->setHeaderData(0, Qt::Horizontal, QVariant("Author Name"), Qt::DisplayRole);
qDebug() << authorModel->setHeaderData(1, Qt::Horizontal, QVariant("Author Id"), Qt::DisplayRole);

int tabIdx = ui->mainTabWidget->addTab(tblView, author);
ui->mainTabWidget->setCurrentIndex(tabIdx);

tblView->setColumnHidden(1, true);

このコードは複数回呼び出され、さまざまなテーブルビューを作成します。authorModelが空の場合、headerdataの設定も失敗します。また、setColumnHiddenも失敗し、データが入力されると、デフォルトの数値ヘッダーが表示され、列1が表示されます。両方のqDebugステートメントはfalseを返します。

ただし、同じ入力モデルを使用して新しいテーブルビューを作成すると、新しいビューの列1は問題なく非表示になり、ヘッダーが適切に設定されます。両方のqDebugステートメントがtrueを返します。

問題は何ですか?それをどのように軽減できますか?

4

1 に答える 1

1

QStandardItemmodel実装にステップインすると、ヘッダーデータの更新から開始する列が存在しない限り、これらの関数には効果がないことがわかります。

したがって、これは、モデルが使用するように設計されている列の数を使用して設定することで回避できます。

authorModel->setColumnCount(2);

このように、モデルデータが空の場合でも、列数は2を返し、ヘッダーデータを設定するための呼び出しは問題ないはずです。

于 2013-03-09T21:44:36.980 に答える