我的应用程序中有一段代码,如下所示:
....

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

多次调用此代码,以创建不同的表 View 。当authorModel为空时,设置 header 数据也会失败,setColumnHidden也会失败,并且一旦填充了数据,就会显示默认数字 header ,并且第1列可见。两个qDebug语句均返回false。

但是,当使用相同的填充模型创建新的表格 View 时,在新 View 中,第1列将被隐藏而不会出现问题,并且标题将按原样设置。两个qDebug语句均返回true。

有什么问题,如何解决?

最佳答案

逐步进入QStandardItemmodel实现表明,对于这些功能,除非存在该列以开始更新 header 数据开始,否则无效。

因此,可以通过以下方法解决此问题:设置模型设计为使用的列数

authorModel->setColumnCount(2);

这样,即使模型数据为空,列数也将返回2,并且在您的情况下,调用设置 header 数据应该可以

09-07 06:37