我的应用程序中有一段代码如下:
....
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);
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。
问题是什么?如何缓解?
答案 0 :(得分:1)
单步执行QStandardItemmodel实现表明,对于这些函数,除非列存在以更新标题数据开始,否则无效。
因此,可以通过使用
设置模型设计之前使用的列数来解决此问题authorModel->setColumnCount(2);
这样即使模型数据是空的,列数也会返回2,并且设置标题数据的调用在你的情况下应该没问题