Qt模型视图类中的意外行为

时间:2013-03-09 15:28:44

标签: c++ qt model-view-controller

我的应用程序中有一段代码如下:

....

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。

问题是什么?如何缓解?

1 个答案:

答案 0 :(得分:1)

单步执行QStandardItemmodel实现表明,对于这些函数,除非列存在以更新标题数据开始,否则无效。

因此,可以通过使用

设置模型设计之前使用的列数来解决此问题
authorModel->setColumnCount(2);

这样即使模型数据是空的,列数也会返回2,并且设置标题数据的调用在你的情况下应该没问题