我的应用程序中有一段代码,如下所示: ....
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 数据应该可以