Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 要在列表上显示的对象的QVector(小部件或模型)?_C++_Qt - Fatal编程技术网

C++ 要在列表上显示的对象的QVector(小部件或模型)?

C++ 要在列表上显示的对象的QVector(小部件或模型)?,c++,qt,C++,Qt,所以我得到了一个Qvector,它包含了一个“contact”类的对象……到目前为止contact类是这样的: class contact { QString firstName; QString lastName; QString email; QString age; QString imgSrc; public: contact(); contact(QString fName, QString

所以我得到了一个Qvector,它包含了一个“contact”类的对象……到目前为止contact类是这样的:

class contact {
        QString firstName;
        QString lastName;
        QString email;
        QString age;
        QString imgSrc;

public:
   contact();
   contact(QString fName, QString lname, QString emailAdd, QString new_Age, QString img);
   QString getPerson(); // return  "James Smith 34" which i add to listwidget   
};
这很简单,我遇到的问题是,我以列表格式显示这些数据的最有效方式是什么,即

亚当·斯密34

约翰·史密斯43

我应该使用基本列表小部件吗??(考虑到我必须将信息按升序和降序排序


或者我是否使用列表视图?但使用哪种模型?

您将拥有子类
QAbstractTableModel
。为了提供一个模型界面来读取联系人信息,请阅读文档。您无需为学员操心,因为您只需显示文本

默认的
QTableView
应该足够了,请记住在
QAbstractTableModel
中实现,否则您将无法在视图中看到列标题标签

要提供排序功能,您需要在模型和视图之间提供一个自定义的
QSortFilterProxyModel
。这些示例提供了如何使用它的好例子


Qt一开始可能会让人望而生畏,但一旦你了解了它的模块化结构,你就可以清楚地知道需要做什么才能获得某些功能。它功能强大得令人难以置信,但有一点学习曲线。

首先,你需要告诉我们你想要如何显示信息,因为它决定了要使用什么小部件。你不能请让我们为您决定。当前,信息在运行时存储在对象(联系人)的QVector中信息应该按照名字姓氏年龄的顺序显示,排成一行。从联系人列表中,我应该可以删除,按年龄降序/升序排序。从对象的Qvector到listView/listWidget的最佳方式是什么,这是最合适的。现在更清楚了吗?谢谢我看了一下,但是使用了QAbstractTableModel过于复杂化了,因为我确实很容易填充listWidget,只需遍历存储在vector中的所有联系人,并在每个联系人上调用listWidget中的addItem函数。因此,对象的vector实际上是为模型服务的。问题是我如何操作信息?我是这样做的吗修改向量,然后重新填充listWidget??这就是为什么我对一个不需要不断重新填充我的实际前端列表的模型感到好奇的原因,这就是为什么Qt有一个MVC框架,只要你尝试静态显示数据之外的任何事情,它就会很快崩溃。记住,你的对象向量总是作为“显示”的数据,模型只提供了一个包装器,以便其他MVC组件可以通过一致的接口访问此数据。换句话说,一旦您设置了模型/视图,更改对象向量将自动更新连接到模型的任何视图。好吧,那么考虑到我对Qt MVC相当陌生,是否有必要在Qvector模型QtListView的描述中,一个现有模型将进行通信,因此操纵该向量将改变连接的模型和视图,因为您(完全正确地)是将数据存储在自定义类中-stock Qt model类如何知道如何访问其中的数据?您还说您希望能够按列排序,因此您需要基于表的模型,而不是基于列表的模型。这是对的,我理解,不,我犯了一个错误,这不是真正的排序,但必须找到最早的联系人并重新填充v因此,它只显示他/她,同样显示最小的,以及基本的积垢操作。感谢您的建议,尽管非常感谢