QListView中的QT4 QstringListModel

Posted

技术标签:

【中文标题】QListView中的QT4 QstringListModel【英文标题】:QT4 QstringListModel in QListView 【发布时间】:2011-04-27 09:59:59 【问题描述】:

这是我的第一个 QT 问题 - 我通常是 C# 程序员,所以请原谅我问了一个愚蠢的问题,我确信有一个非常简单的答案,但我似乎找不到:

我想将项目添加到列表中,暂时假设它们是字符串。 我有一个 QListView:UI->listView、一个 QStringList 和一个 QStringListModel:

stringList = new QStringList();
stringList->append("ABC");
stringList->append("123");

listModel = new QStringListModel(*stringList, NULL);
ui->listView->setModel(listModel);

stringList->append("xyz");

此示例编译并显示我的列表中的“ABC”和“123”,而不是“xyz”。为什么不?我需要以某种方式重新绘制 listView 吗?我是不是对 NULL 做错了什么?

谢谢。

【问题讨论】:

注意:不需要在堆上创建 QStringLists。容器是隐式共享的,通常通过 value/const ref 传递。 是的。在 Qt 中,您可以按值传递可能的实例(例如,QString、QList),而无需任何计算开销。 look here 【参考方案1】:

如果您经常需要修改字符串列表并且有需要更新的连接视图,您可以考虑首先取消 QStringList 并单独使用 QStringListModel。您可以使用 insertRows/removeRows 和 setData 在此处添加/删除数据。这可确保视图始终以您期望的方式反映模型。这可以被包装以防止繁琐的工作。类似(未经测试):

class StringList : public QStringListModel

public:
  void append (const QString& string)
    insertRows(rowCount(), 1);
    setData(index(rowCount()-1), string);
  
  StringList& operator<<(const QString& string)
    append(string);
    return *this;
  
;

【讨论】:

【参考方案2】:

你修改了QStringList,需要修改模型:

stringList->append("xyz");
listModel->setStringList(*stringList);

【讨论】:

以上是关于QListView中的QT4 QstringListModel的主要内容,如果未能解决你的问题,请参考以下文章

QListView 更新 - 不触发更新

如何从 QT 中的 QListView 获取所选项目的文本? [复制]

Qt:更改 QListView 中的图标

PyQt4 - 在 QListView 中的项目上按下 Enter 键

使用 QStyledItemDelegates 作为 QListView 中的自定义项

如何防止 Qt 对 QListView 中的图标进行 alpha 混合选择?