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

Posted

技术标签:

【中文标题】QT 模型/视图项目不显示来自 QList 的字符串【英文标题】:QT Model/View Project doesnt show Strings from QList 【发布时间】:2014-07-25 09:23:58 【问题描述】:

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

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

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

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

在 setData 中,我将字符串推送到两个 QList 中。

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

我用左上角和右下角的索引发出一个 dataChanged 信号。

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()); 

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

【问题讨论】:

您没有显示足够的代码来判断问题所在。例如,模型中的setData 没有QAbstractItemModel::setData 的签名。 Qt 5.2 Model-View-Pattern: How to inform model object about changes in underlying data structure的可能重复 【参考方案1】:

一个明显的问题是您没有正确理解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();

【讨论】:

对 ^^ 我忘了在 setDat 中再写一遍。我在某个时候删除了它,因为当你想用按钮添加一些东西时,带有“开始..和结束..”的程序会崩溃:/ @thelittlePanda 您绝对必须发布一个完整的、独立的示例来重现该问题。创建一个仅包含“main.cpp”的新项目,当您重现问题时,将其复制粘贴到您的问题中。这样您就不会忘记任何重要的细节,也不会浪费每个人的时间(包括你的)。否则,我们将在今年余下的时间里绕圈子。 对不起。我认为这是一个论坛,您可以在遇到问题时提问。与渴望帮助(并牺牲您的时间)的人在一起。然后问题是我又忘记了要写的东西。我只是一个初学者:(我再次检查了我的 PRG.. @thelittlePanda 当然你可以问,但要使问题有用且可回答,它不能忽略最基本的信息。如果您甚至无法正确复制粘贴代码,我们该如何回答?我所说的浪费时间指的是指出错误实际上并不存在于您正在运行的代码中,而是存在于您草率编写的问题中。高质量的问题会带来高质量的答案。

以上是关于QT 模型/视图项目不显示来自 QList 的字符串的主要内容,如果未能解决你的问题,请参考以下文章

模型中的 Qt 模型?

QListView 仅在视图中显示单个项目

Qt ListView 不显示 C++ 模型内容

Qt容器类的对象模型及应用(线性结构篇:对于QList来说,sharable默认是false的,但对于接下来讲的QVector来说,sharable默认是true)

Qt:如何在模型/视图设置中同步对来自多个线程的数据的访问?

Qt入门系列开发教程高级控件篇QListview列表视图