2013-03-09 191 views
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); 

该代码多次调用创建不同tableviews。当authorModel为空时,则设置headerdata失败,并且setColumnHidden失败,一旦填充数据,将显示默认数字标题并显示第1列。两个qDebug语句都返回false。

然而,当同样的人口模型被用来创建一个新的表视图,在新的视图列1没有隐藏的问题,及标头设置,因为他们应该。两个qDebug语句都返回true。

问题是什么?如何缓解?

+1

你试过authorModel-> setColumnCount(2)设置列标题时,模型是空的前设置? – Viv 2013-03-09 20:36:13

+0

@Viv解决了它。非常感谢你。 – lorefnon 2013-03-09 21:22:33

+0

您的欢迎:)发布相同的答案,为什么这可以解决您的问题 – Viv 2013-03-09 21:46:24

回答

1

踏入QStandardItemmodel实施表明,对于这些功能,除非列中存在以开始更新标题数据没有影响。

这因此可以通过设置模式旨在通过使用

authorModel->setColumnCount(2); 

即使模型数据为空列数将返回2通过这种方式与调用之前使用的列数各地工作设置标题数据要细,你的情况