QListView中的QT4 QstringListModel

Ozz*_*zah 6 c++ qt qt4 qlistview

这是我的第一个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");
Run Code Online (Sandbox Code Playgroud)

这个例子在我的列表中编译和删除"ABC"和"123",但不是"xyz".为什么不?我需要以某种方式重新绘制listView吗?我对NULL做错了吗?

谢谢.

Adv*_*sus 23

如果您经常需要修改字符串列表并具有需要更新的已连接视图,则可以考虑首先取消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;
  }
};
Run Code Online (Sandbox Code Playgroud)


Don*_*alo 6

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

stringList->append("xyz");
listModel->setStringList(*stringList);
Run Code Online (Sandbox Code Playgroud)