我正在开发一个Qt5应用程序,其中包含一个小部件,其作用是向用户显示一个对象列表(垂直列表,单列),每个条目包含3或4个属性。我还需要重用一个用于表示每个对象的自定义小部件。我的第一个想法是使用QListView
,但似乎他们只处理一个属性。有没有人知道Qt是否提供了在单个列表视图中显示代表多个属性的小部件列表的方法?
答案 0 :(得分:0)
我看到三个选项:
QTreeView
。它们看起来不像QTableVeiw
那样的电子表格,但更像是列表视图。您不必使用树结构来使用它,它会显示列表或表格。QStyledItemDelegate
并自行将所有属性渲染到一个单元格中。您甚至可以使用自定义小部件作为渲染的基础。但是,您将只有一个实例,并且它实际上永远不会显示。因此,请确保自定义窗口小部件无论如何都能正确呈现,并且更新它很快。您必须为渲染的每个单元格更改其数据。QBoxLayout
中。如果你这样做并拥有大量的物品,你会遇到性能问题。如果您确实遇到过这种情况并且真的想要这样做,请查看我为此目的编写的库:longscroll-qt。答案 1 :(得分:0)
我相信,您需要的是过去几天一直在寻找的QListWidget
:(
这是我的用法:
#include <QListWidget>
#include <QPointer>
class MyObjectListWidget : public QListWidget
{
public:
MyObjectListWidget(QWidget *parent=nullptr);
bool addMyObject(QPointer<MyObject> obj);
private:
QList<QPointer<MyObject>> my_objects;
};
并在cpp文件中:
bool MyObjectListWidget::addMyObject(QPointer<MyObject> obj){
if(!obj.isValid())
return false;
auto item = new QListWidgetItem(this);
addItem(item);
auto row = new MyObjectItemWidget(obj,this);
item->setSizeHint(row->minimumSizeHint());
setItemWidget(item,row);
my_objects.push_back(obj);
return true;
}
MyObjectItemWidget
是我的自定义窗口小部件,其中包含一个.ui
文件,该文件有助于生成视图并采用名为MyObject
的自定义对象作为arg。