模型视图(14):【类】QListView[官翻]

QListView 类

QListView类提供了模型的列表或图标视图。

Header:#include < QListView >
qmake:QT += widgets
Inherits:QAbstractItemView
Inherited By:QListWidget and QUndoView

详述

img

QListView显示存储在模型中的项,可以是一个简单的非层次列表,也可以是一个图标集合。这个类用于提供以前由QListBox和QIconView类提供的列表和图标视图,但是使用了Qt的模型/视图体系结构提供的更灵活的方法。

QListView类是模型/视图类之一,是Qt的模型/视图框架的一部分。

此视图不显示水平或垂直标题;要使用水平标题显示项目列表,请使用QTreeView。

QListView实现了QAbstractItemView类定义的接口,允许它显示由QAbstractItemModel类派生的模型提供的数据。

列表视图中的项目可以使用两种视图模式之一来显示:在ListMode中,项目以简单列表的形式显示;在IconMode中,列表视图采用图标视图的形式,其中项目用文件管理器中的文件之类的图标显示。默认情况下,列表视图处于ListMode。要更改视图模式,请使用setViewMode()函数,要确定当前的视图模式,请使用viewMode()。

这些视图中的项按照列表视图的flow()指定的方向排列。根据视图的movement()状态,项目可以固定在适当的位置,也可以允许移动。

如果模型中的项不能完全按照流的方向排列,则可以在视图小部件的边界处进行包装;这取决于isWrapping()。当项目由图标视图表示时,此属性非常有用。

resizeMode()和layoutMode()控制项目的布局方式和时间。项目的间距取决于它们的间距(),并且可以存在于由gridSize()指定的概念网格中。根据iconSize(),这些项可以显示为大图标或小图标。

提高性能

在显示大量项时,可以为视图提供有关它正在处理的数据的提示,以提高其性能。对于想要显示大小相同的项的视图,可以采取的一种方法是将uniformitemsize属性设置为true。

公共类型

enum Flow

ConstantValueDescription
LeftToRight0项目在视图中从左到右排列。
TopToBottom1项目在视图中从上到下排列。

enum LayoutMode

ConstantValueDescription
SinglePass0这些项目一下子就列出来了。
Batched1这些项目是按批量大小分批排列的。

enum Movement

ConstantValueDescription
Static0项目不能由用户移动。
Free1项目可以由用户自由移动。
Snap2项目在移动时吸附到指定的网格;看到setGridSize()。

enum ResizeMode

ConstantValueDescription
Fixed0项目将只在第一次显示视图时进行布局。
Adjust1每当视图调整大小时,这些项将被布局。

enum ViewMode

ConstantValueDescription
ListMode0项目是安排使用TopToBottom flow,具有小的尺寸和静态运动
IconMode1项目的布局使用左向流动,大尺寸和自由移动

属性

  1. batchSize: int 如果将layoutMode设置为批处理,则此属性保存在每个批处理中布局的项数
    默认值是100。

  2. flow: Flow 此属性保存项布局应向哪个方向流动
    如果该属性是left ttoright,则项目将从左到右排列。如果iswrap属性为真,布局将在到达可见区域的右侧时自动换行。如果此属性为TopToBottom,则项目将从可见区域的顶部展开,到达底部时进行换行。

    在视图可见时设置此属性将导致项目再次布局。

    默认情况下,该属性被设置为TopToBottom。

  3. gridSize: QSize 此属性保存布局网格的大小

    此属性表示项目所在网格的大小。默认大小为空,这意味着没有网格,布局不是在网格中完成的。将此属性设置为网格布局上的非空大小开关。(当网格布局生效时,间距属性被忽略。)

    在视图可见时设置此属性将导致项目再次布局。

  4. isWrapping: bool 此属性保存项目布局是否应换行

    此属性用于在可见区域没有更多空间时布局是否应该换行。布局包装的位置取决于flow属性。

    在视图可见时设置此属性将导致项目再次布局。

    默认情况下,此属性为false。

  5. itemAlignment: Qt::Alignment 此属性保存其单元格中每个项的对齐方式
    这只支持在列表模式TopToBottom流和包装启用。默认对齐为0,这意味着一个项完全填充它的单元格。

  6. layoutMode: LayoutMode 确定项的布局应该立即发生还是延迟, 此属性保存项的布局模式
    当模式为SinglePass(默认值)时,所有项目都被一次性列出。当对模式进行批处理时,在处理事件时,项目将以批处理的方式排列。这使得它能够在其他可视项目被布局时立即查看并与之交互。

  7. modelColumn: int 此属性保存模型中可见的列
    默认情况下,此属性包含0,表示将显示模型中的第一列。

  8. movement: Movement 此属性决定用户如何在视图中移动项目
    无论项目是可以自由移动、锁定到网格中,还是根本不能移动,这个属性都有效。
    Static意味着项目不能在用户中移动。Free意味着用户可以将项目拖放到视图中的任何位置。Snap意味着用户可以拖放项目,但只能拖放到gridSize属性所表示的概念性网格中的位置。
    在视图可见时设置此属性将导致项目再次布局。
    默认情况下,此属性设置为Static。

  9. resizeMode: ResizeMode 此属性保存在视图调整大小时项目是否再次布局
    如果此属性是调整的,则在视图调整大小时,这些项将再次布局。如果该值是固定的,则在调整视图大小时将不会布局这些项。
    默认情况下,此属性设置为固定。

  10. selectionRectVisible: bool 选择矩形是否可见
    注意:只有当选择模式处于可选择多个项目的模式时,选择矩形才会显示;例如,如果选择模式是QAbstractItemView::SingleSelection,它将不会绘制一个选择矩形。
    默认情况下,此属性为false。

  11. spacing: int 此属性保存布局中项周围的空间
    此属性是布局中在项周围填充的空白空间的大小。
    在视图可见时设置此属性将导致项目再次布局。
    默认情况下,此属性的值为0。

  12. uniformItemSizes: bool 这个属性包含列表视图中的所有项目是否具有相同的大小
    只有在确保视图中的所有项具有相同的大小时,才应该将此属性设置为true。这使视图能够进行一些性能优化。
    默认情况下,此属性为false

  13. viewMode: ViewMode 此属性保存QListView的视图模式
    此属性将更改其他未设置属性,以符合set视图模式。已经设置的特定于qlistview的属性不会被更改,除非调用了clearPropertyFlags()。
    设置视图模式将根据选中的移动启用或禁用拖放。对于ListMode,默认的移动是静态的(禁用拖放);对于IconMode,默认的移动是自由的(支持拖放)。

  14. wordWrap: bool 此属性保存项目文本换行策略
    如果该属性为true,则在需要换行的地方对条目文本进行换行;否则就根本不包装。默认情况下,此属性为false。
    请注意,即使启用了换行,单元格也不会展开来为文本腾出空间。根据视图的textElideMode,它将为不能显示的文本打印省略号。

公共函数

构造析构

  1. QListView(QWidget *parent = nullptr)
  2. virtual ~QListView()

属性

  1. void clearPropertyFlags() 清除特定于QListView的属性标志。参见viewMode。
    属性标志不覆盖从QAbstractItemView继承的属性。具体来说,dragEnabled和acceptsdrop是QListView在调用setMovement()或setViewMode()时计算出来的。

  2. QListView::Flow flow() const

  3. void setFlow(QListView::Flow flow)

  4. QSize gridSize() const

  5. void setGridSize(const QSize &size)

  6. bool isRowHidden(int row) const

  7. void setRowHidden(int row, bool hide)

  8. bool isSelectionRectVisible() const

  9. void setSelectionRectVisible(bool show)

  10. Qt::Alignment itemAlignment() const

  11. void setItemAlignment(Qt::Alignment alignment)

  12. QListView::LayoutMode layoutMode() const

  13. void setLayoutMode(QListView::LayoutMode mode)

  14. int modelColumn() const

  15. void setModelColumn(int column)

  16. QListView::Movement movement() const

  17. void setMovement(QListView::Movement movement)

  18. QListView::ResizeMode resizeMode() const

  19. void setResizeMode(QListView::ResizeMode mode)

  20. int spacing() const

  21. void setSpacing(int space)

  22. bool uniformItemSizes() const

  23. void setUniformItemSizes(bool enable)

  24. QListView::ViewMode viewMode() const

  25. void setViewMode(QListView::ViewMode mode) 此属性保存QListView的查看模式

    此属性将更改其他未设置的属性以符合设置的视图模式。 除非已调用clearPropertyFlags() ,否则不会更改已设置的特定于QListView的属性。

    设置查看模式将根据所选移动启用或禁用拖放。 对于ListMode,默认移动为“静态”(禁用拖放); 对于IconMode,默认移动为Free(启用拖放)。

  26. bool isWrapping() const

  27. void setWrapping(bool enable)

  28. bool wordWrap() const

  29. void setWordWrap(bool on)

重新实现的公共函数

  1. virtual QModelIndex indexAt(const QPoint &p) const override
  2. virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible) override
  3. virtual QRect visualRect(const QModelIndex &index) const override

信号

  1. void indexesMoved(const QModelIndexList &indexes)

受保护的函数

  1. QRect rectForIndex(const QModelIndex &index) const
  2. void setPositionForIndex(const QPoint &position, const QModelIndex &index)

重新实现的受保护的函数

  1. virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous) override
  2. virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()) override
  3. virtual void dragLeaveEvent(QDragLeaveEvent *e) override
  4. virtual void dragMoveEvent(QDragMoveEvent *e) override
  5. virtual void dropEvent(QDropEvent *e) override
  6. virtual bool event(QEvent *e) override
  7. virtual int horizontalOffset() const override
  8. virtual bool isIndexHidden(const QModelIndex &index) const override
  9. virtual void mouseMoveEvent(QMouseEvent *e) override
  10. virtual void mouseReleaseEvent(QMouseEvent *e) override
  11. virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override
  12. virtual void paintEvent(QPaintEvent *e) override
  13. virtual void resizeEvent(QResizeEvent *e) override
  14. virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override
  15. virtual void rowsInserted(const QModelIndex &parent, int start, int end) override
  16. virtual QModelIndexList selectedIndexes() const override
  17. virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override
  18. virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) override
  19. virtual void startDrag(Qt::DropActions supportedActions) override
  20. virtual void timerEvent(QTimerEvent *e) override
  21. virtual void updateGeometries() override
  22. virtual int verticalOffset() const override
  23. virtual QStyleOptionViewItem viewOptions() const override
  24. virtual QSize viewportSizeHint() const override
  25. virtual QRegion visualRegionForSelection(const QItemSelection &selection) const override
  26. virtual void wheelEvent(QWheelEvent *e) override

示例

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QStringListModel mode(QStringList() << "1" << "2" << "3");

    QListView view;
    view.setModel(&mode);

    view.setGridSize(QSize(100,30));
    view.setMovement(QListView::Free);
    view.setSelectionRectVisible(true);
    view.setDragDropMode(QListView::InternalMove);
    view.setFlow(QListView::LeftToRight);
    view.setItemAlignment(Qt::AlignRight);
    view.show();

    return a.exec();
}

参见

  • View Classes
  • Item Views Puzzle Example
  • QTreeView
  • QTableView
  • QListWidget
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值