在使用Qt模型视图框架的时候,你可能会遇见这种情况:给QTableView设置设置模型的时候,网模型里面插入数据,因为数据是一行一行插入的,即要使用model的appandRow函数,但有时候最后一行数据没有填满一行,但是没有填满的那一部分仍然可以点击,如下代码:
while(query.next()){
ProductInfo info;
info.number = query.value("product_number").toString();
info.kind = static_cast<ProductInfo::Kind>(query.value("kind").toInt());
info.title = query.value("title").toString();
info.description = QJsonDocument::fromJson(query.value("description").toByteArray());
info.classification = QJsonDocument::fromJson(query.value("classification").toByteArray());
info.image = QJsonDocument::fromJson(query.value("image").toByteArray());
info.description_image = QJsonDocument::fromJson(query.value("description_image").toByteArray());
QStandardItem* item = new QStandardItem();
item->setEditable(false);
item->setData(QVariant::fromValue(info),Qt::UserRole + 1);
itemList.append(item);
if(itemList.size() == MAXCOLUMN){
this->m_model->appendRow(itemList);
itemList.clear();
}
}
this->m_model->appendRow(itemList);
这就会造成隐藏的程序崩溃的风险,如图:
那么该如何解决这个问题?以下为我的解决办法:
if (!itemList.isEmpty()) {
// 插入前禁用所有项
for (size_t i = itemList.size(); i < MAXCOLUMN; i++)
{
QStandardItem* item = new QStandardItem();
item->setFlags(Qt::NoItemFlags);
itemList.append(item);
}
}
this->m_model->appendRow(itemList);
return query.size();
思路就是:将最后一行用无用项填满。。。OK,问题解决。