QT模型/视图项目不显示来自QList的字符串

时间:2014-07-25 09:23:59

标签: qt view model qtableview qabstractitemmodel

我的QTableView没有显示来自QStringList的字符串。

在QTableWidget中我有QTableWidgetItems。我必须手动设置字符串还是视图会自动显示它们?在所有教程中,我都没有看到" - > setItem",它们会自动显示。

我有2个QLineEdits将QStrings提供给我的模型:

void View::pushButtonClicked() {
  meinModel->setData(txtname->text(), txtvalue->text());
}

在setData中,我将字符串推入两个QLists。

names.push_back(name);
values.push_back(value);

我发出一个dataChanged信号,其索引来自topleft和bottomright。

QModelIndex topLeft = createIndex(names.size()+1,0);
QModelIndex bottomRights = createIndex(names.size()-1,1);
emit dataChanged(topLeft, bottomRights);

我有一个QAbstractTableModel,所以我重写了columnCount,rowCount和data方法。 在我的data()方法中,我返回我的值和名称:

QString returnValue;
if(0 == index.column()) { returnValue = names.at(index.row()); }

所有这些都是在没有警告的情况下编译的,但是没有正常工作:(有什么我明显做错的吗?

1 个答案:

答案 0 :(得分:0)

一个明显的问题是你没有正确地获得dataChanged的语义。 dataChanged表示现有项已更改其值。通过添加/删除行或列来更改模型的结构时,您必须将修改括在beginXxxendXxx调用中 - 请参阅this answer的信息。

例如:

void MyModel::setData(const QString & name, const QString & value) {
  beginInsertRows(QModelIndex(), names.size(), names.size());
  names.push_back(name);
  values.push_back(value);
  endInsertRows();
}