天天看点

Qt模型视图框架:QListView、QListWidget

作者:QT教程
Qt模型视图框架:QListView、QListWidget

QListView

一、描述

QListView 将存储在模型中的项目呈现为简单的非分层列表或图标集合。此视图不显示水平或垂直标题。

QStandardItemModel * model = new QStandardItemModel;
for(int i = 0; i < 11; ++i)
{
QStandardItem *item = new QStandardItem(QString::number(i));
model->appendRow(item);
}
QListView listView;
listView.setModel(model);
listView.show();           

二、类型成员

1、enum QListView::Flow:项目布局流向方向。

  • LeftToRight:项在视图中从左到右排列。如果 isWrapping 属性为 true,则布局将在到达可见区域的右侧时换行。
  • TopToBottom:项在视图中从上到下排列。(默认)

2、enum QListView::LayoutMode:项目的布局是应该立即发生还是延迟发生。

  • SinglePass:项目一次全部布局。
  • Batched:项目按 batchSize属性进行批量布局。

3、enum QListView::Movement:如何在视图中移动项目

  • Static:不能移动项目。(默认)
  • Free:可以自由移动项目。
  • Snap:移动时项目对齐到指定的网格。

4、enum QListView::ResizeMode:在调整视图大小时是否再次对项目进行布局。

Fixed:只有在第一次显示视图时才会对项目进行布局。

Adjust:每次调整视图大小时都会对项目进行布局。

5、enum QListView::ViewMode:视图模式

  • ListMode:项目使用从上到下流布局,小尺寸,禁用拖放。
  • IconMode:项目使用从左到右流布局,大尺寸,启用拖放。

三、属性成员

1、batchSize : int

如果 layoutMode 设置为Batched,则此属性保存每个批次中布局的项目数。默认值为 100。

2、gridSize : QSize

此属性是布置项目的网格的大小。默认为空尺寸,这意味着没有网格并且布局不在网格中完成。 将此属性设置为非空大小会打开网格布局。(当网格布局生效时,spacing属性将被忽略。)

3、isWrapping : bool

此属性保存当可见区域中没有更多空间时布局是否应换行。布局环绕的点取决于flow(QListView::Flow)属性。默认情况下,此属性为 false。

4、itemAlignment : Qt::Alignment

此属性保存其单元格中每个项目的对齐方式。这仅在具有 TopToBottom 流和 isWrapping 为true时受支持。默认为 0,即项目完全填充其单元格。

5、modelColumn : int

此属性保存模型中可见的列。

6、selectionRectVisible : bool

如果选择模式处于可以选择多个项目的模式,选择矩形是否可见。默为 false。(QAbstractItemView::SelectionMode)

7、spacing : int

此属性是在布局中的项目周围填充的空白空间的大小。默认为 0。

8、uniformItemSizes : bool

此属性保存列表视图中的所有项目是否具有相同的大小。默认为 false。

9、wordWrap : bool

如果此属性为true,则项目文本会在必要的断字处换行。默认为 false。

四、成员函数

1、[signal] void indexesMoved(const QModelIndexList &indexes)

指定的索引在视图中移动时会发出此信号。

2、void clearPropertyFlags()

清除设置的 QListView::ViewMode。

3、bool isRowHidden(int row)

某行是否已隐藏。

4、QRect rectForIndex(const QModelIndex &index)

返回模型中 index 位置项的矩形。

5、void setRowHidden(int row, bool hide)

设置某行隐藏或者显示。

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击这里:「链接」

QListWidget

一、描述

QListWidget 是一个方便的类,它提供类似于 QListView 提供的列表视图,但具有用于添加和删除项目功能的界面。 QListWidget 使用内部模型来管理列表中的每个 QListWidgetItem。

有两种方法可以将项目添加到列表中:

可以使用列表小部件作为其父小部件来构建。

QListWidget *listWidget = new QListWidget(this);
new QListWidgetItem(tr("Oak"), listWidget);
new QListWidgetItem(tr("Fir"), listWidget);
new QListWidgetItem(tr("Pine"), listWidget);           

可以在没有父小部件的情况下构建并稍后添加到列表中。

QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(itemText);
QListWidget *listWidget = new QListWidget(this);
listWidget->insertItem(row, newItem);           

二、属性成员

1、count : const int

此属性保存列表中的项目数,包括任何隐藏项目。

2、currentRow : int

此属性保存当前项目的行。

3、sortingEnabled : bool

此属性保存是否启用排序。默认值为false。

三、成员函数

3.1、信号

1、void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)

每当当前项目发生变化时都会发出此信号。

previous 是先前具有焦点的项目; current 是新的当前项目。

2、void currentRowChanged(int currentRow)

每当当前项目发生变化时都会发出此信号。currentRow 是当前项目的行。 如果没有当前项,则 currentRow 为 -1。

3、void currentTextChanged(const QString ¤tText)

每当当前项目发生变化时都会发出此信号。currentText 是当前项中的文本数据。 如果没有当前项,则 currentText 无效。

4、void itemActivated(QListWidgetItem *item)

当项目被激活时发出这个信号。 当用户单击或双击它时,该项目将被激活,具体取决于系统配置。 当用户按下激活键时它也会被激活(在 Windows 和 X11 上这是返回键,在 Mac OS X 上是 Command+O)。

5、void itemChanged(QListWidgetItem *item)

每当 item 的数据发生变化时,就会发出此信号。

6、void itemClicked(QListWidgetItem *item)

当在小部件中的item上单击鼠标按钮时,此信号随指定item一起发出。

7、void itemDoubleClicked(QListWidgetItem *item)

当在小部件中的item上双击鼠标按钮时,此信号随指定item一起发出。

8、 void itemEntered(QListWidgetItem *item)

当鼠标光标进入一个item时发出这个信号。item是输入的项目。此信号仅在打开 mouseTracking(QWidget::setMouseTracking(true))或在移动到item时按下鼠标时发出。

9、void itemPressed(QListWidgetItem *item)

当在小部件中的item上按下鼠标按钮时,此信号随指定item一起发出。

10、void itemSelectionChanged()

只要选择发生变化,就会发出该信号。

3.2、函数

1、void clear()

删除视图中的所有项目。

2、void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

如有必要,滚动视图以确保项目可见。hint 指定操作后项目应位于的位置。

3、void addItem(const QString &label) / void addItems(const QStringList &labels)

在列表小部件的末尾插入带有文本标签的项目。

4、void addItem(QListWidgetItem *item)

在列表小部件的末尾插入项目。

警告: QListWidgetItem 只能添加到 QListWidget 一次。 将相同的 QListWidgetItem 多次添加到 QListWidget 将导致未定义的行为。

5、void closePersistentEditor(QListWidgetItem *item)

关闭给定项目的持久编辑器。

6、QListWidgetItem * currentItem()

获取当前item。

7、void editItem(QListWidgetItem *item)

如果item可编辑,则开始编辑item。

8、QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags)

使用flags查找具有与text匹配的文本的项目。

  • enum Qt::MatchFlag:此枚举描述了在模型中搜索项目时可以使用的匹配类型。
  • Qt::MatchExactly:执行基于 QVariant 的匹配。
  • Qt::MatchFixedString:执行基于字符串的匹配。除非还指定了 MatchCaseSensitive 标志,否则基于字符串的比较不区分大小写。
  • Qt::MatchContains:搜索词包含在项目中。
  • Qt::MatchStartsWith:搜索词匹配项的开头。
  • Qt::MatchEndsWith:搜索词匹配项的结尾。
  • Qt::MatchCaseSensitive:搜索区分大小写。
  • Qt::MatchRegularExpression:使用正则表达式作为搜索词来执行基于字符串的匹配。使用 QRegularExpression。使用此标志时,可以将 QRegularExpression 对象作为参数传递,并将直接用于执行搜索。区分大小写标志将被忽略。
  • Qt::MatchWildcard:使用带有通配符的字符串作为搜索词来执行基于字符串的匹配。
  • Qt::MatchWrap:执行环绕搜索,这样当搜索到达模型中的最后一项时,它会再次从第一项开始,一直持续到检查完所有项为止。
  • Qt::MatchRecursive:搜索整个层次结构。

注意:

  • Qt::MatchExactly
  • Qt::MatchContains
  • Qt::MatchStartsWith
  • Qt::MatchEndsWith
  • Qt::MatchRegularExpression
  • Qt::MatchWildcard
  • Qt::MatchFixedString

是互斥的。通过在 Qt::MatchFlags 参数中设置其中几个实现的行为是未定义的。

9、QModelIndex indexFromItem(const QListWidgetItem *item) 【常用】

返回与给定项目关联的 QModelIndex。

10、QListWidgetItem * itemFromIndex(const QModelIndex &index) 【常用】

返回指向与给定索引关联的 QListWidgetItem 的指针。

11、void insertItem(int row, QListWidgetItem *item)

void insertItem(int row, const QString &label)
void insertItems(int row, const QStringList &labels)           

在row给定的列表中的位置插入项目。

12、bool isPersistentEditorOpen(QListWidgetItem *item)

返回是否为项目项打开了持久编辑器。

13、QListWidgetItem * item(int row)

返回列表中给定行的项目。

14、QListWidgetItem * itemAt(const QPoint &p)

返回指向坐标 p 处的项目的指针。 坐标相对于列表小部件的viewport()(QWidget::viewport())。

15、QWidget * itemWidget(QListWidgetItem *item)

void setItemWidget(QListWidgetItem *item, QWidget *widget)           

返回给定项目中显示的小部件。/

设置要在给定项目中显示的小部件。此函数应该仅用于在列表小部件项的位置显示静态内容。 如果要显示自定义动态内容或实现自定义编辑器小部件,请改用 QListView 和子类 QStyledItemDelegate。

16、void removeItemWidget(QListWidgetItem *item)

删除在给定项目上设置的小部件。

17、QList<QListWidgetItem *> items(const QMimeData *data)

返回指向包含data的项目的指针列表。

18、void openPersistentEditor(QListWidgetItem *item)

打开给定项目的编辑器。编辑器在编辑后保持打开状态。

19、int row(const QListWidgetItem *item)

返回包含给定item的行。

20、QList<QListWidgetItem *> selectedItems()

返回列表小部件中所有选定项目的列表。

21、void setCurrentItem(QListWidgetItem *item)

将当前项目设置为item。除非选择模式为 NoSelection,否则item也会被选中。

22、void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command)

void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)           

设置当前行。

23、void sortItems(Qt::SortOrder order = Qt::AscendingOrder)

根据指定的顺序对列表小部件中的所有项目进行排序。

24、QListWidgetItem * takeItem(int row)

从列表小部件的给定行中删除并返回项目。

从列表小部件中删除的项目不会由 Qt 管理,需要手动删除。

25、QRect visualItemRect(const QListWidgetItem *item)

返回 item 处的 item 占据的视口上的矩形。

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击这里:「链接」

原文链接:https://blog.csdn.net/kenfan1647/article/details/119700732

继续阅读