QTableView显示列标题,但没有数据?

时间:2015-03-09 21:08:03

标签: c++ mysql qt model-view

我无法弄清楚为什么我的QTableView不会显示任何数据。我已经搜索了关于这个问题的所有其他问题,似乎问题通常是有人试图在堆栈上创建模型并让它超出范围......

我在堆上创建模型,所以这不是问题,但我仍然没有在View中获得数据。我的sql表中的列标题正确显示。这段代码可能有什么问题?

// db is my database wrapper and database returns a reference to the database
QSqlTableModel *tradeHistoryModel = new QSqlTableModel(this, db->database());

// table_tradeHistory is my QTableView created elsewhere
table_tradeHistory->setModel(tradeHistoryModel);

tradeHistoryModel->setTable("mytrades");
tradeHistoryModel->setEditStrategy(QSqlTableModel::OnManualSubmit);

if (!tradeHistoryModel->select())
{
  // err is just a handy macro for displaying fancy error output
  // the call to select does NOT return false so this never gets called
  err("model select failed!");
}

// debug is another macro, the output shows 200 rows (which is correct)
debug(QString("Got %1 rows..").arg(tradeHistoryModel->rowCount()));

因此没有显示错误,因为select()返回true,并且调试输出显示所有200行选择的模型,但视图中仍然没有数据...

感谢您的帮助!

编辑:这一定是Qt或Qt Designer的错误...我回到设计师并将QTableView“变形”为QTreeView,然后将其切换回来,现在突然它显示数据..当我这样做时,我没有改变任何代码...... wtf?如果它是一个错误,我不确定我能再次重现它......

2 个答案:

答案 0 :(得分:0)

问题可能是tradeHistoryModel-> select()。我没有  认为它被正确选中。尝试单独调用它,而不是在IF语句中。还要检查数据的兼容性,db上的数据和QTableView上的数据。我在QDate上遇到了类似的问题,我在修改QTableView上显示的格式后设法解决了这个问题。问题是PostgreSQL和Qt使用不同的日期格式。 为了确保它与此问题无关,请尝试

model->setFilter(filter);
model->select();    

modelsql->removeColumn(0);    

删除可能包含此问题的列。祝你好运!

答案 1 :(得分:0)

感谢您的帖子。同样的事情发生在我身上,并将QTableView变形为QTreeView然后回到QTableView也为我修复了它。当我比较之前和之后,原来的坏ui有<attribute name="verticalHeaderDefaultSectionSize"><number>0</number></attribute>部分。也许这使得标题扩展到视图的整个空间,并且没有空间来显示数据行,Qt没有理由从模型中请求数据。 我开始使用QTableWidget但后来切换到QTableView以通过canFetchMore / fetchMore实现批处理,所以可能这个问题是QTableWidget遗留下来的。