Qt入门系列开发教程【高级控件篇】QTreeWidget树形小部件

举报
鱼酱 发表于 2022/02/25 13:13:10 2022/02/25
【摘要】 效果图 描述QTreeWidget类是一个方便的类,它提供了一个标准的树小部件,带有一个基于项的经典接口,类似于qt3中QListView类所使用的接口。此类基于Qt的模型/视图体系结构,并使用默认模型来保存项,每个项都是QTreeWidgetItem。不需要模型/视图框架灵活性的开发人员可以使用该类非常轻松地创建简单的分层列表。更灵活的方法包括将QTreeView与标准项目模型相结合。这...

效果图

QTreeWidget

描述

QTreeWidget类是一个方便的类,它提供了一个标准的树小部件,带有一个基于项的经典接口,类似于qt3中QListView类所使用的接口。此类基于Qt的模型/视图体系结构,并使用默认模型来保存项,每个项都是QTreeWidgetItem。
不需要模型/视图框架灵活性的开发人员可以使用该类非常轻松地创建简单的分层列表。更灵活的方法包括将QTreeView与标准项目模型相结合。这允许数据的存储与其表示分离。
在最简单的形式中,树小部件可以通过以下方式构造:

 QTreeWidget *treeWidget = new QTreeWidget();
 treeWidget->setColumnCount(1);
 QList<QTreeWidgetItem *> items;
 for (int i = 0; i < 10; ++i)
     items.append(new QTreeWidgetItem(static_cast<QTreeWidget *>(nullptr), QStringList(QString("item: %1").arg(i))));
 treeWidget->insertTopLevelItems(0, items);

在将项目添加到树小部件之前,必须使用setColumnCount()设置列数。这允许每个项目有一个或多个标签或其他装饰。使用columnCount()函数可以找到正在使用的列数。
树可以有一个标题,其中包含小部件中每列的一个部分。通过提供带有setHeaderLabels()的字符串列表,为每个节设置标签是最简单的,但是可以使用QTreeWidgetItem构造自定义标题,并使用setHeaderItem()函数插入到树中。
树中的项目可以根据预定义的排序顺序按列排序。如果启用了排序,用户可以通过单击列标题对项目进行排序。可以通过调用setSortingEnabled()来启用或禁用排序。isSortingEnabled()函数指示是否启用排序。

属性

  • columnCount : int
    此属性保存树小部件中显示的列数
  • topLevelItemCount : const int
    此属性保存顶级项目的数量
    默认情况下,此属性的值为0。

公有函数

//将该项添加为小部件中的顶级项。
 void addTopLevelItem(QTreeWidgetItem *item)
// 将多个项添加为小部件中的顶级项。
 void addTopLevelItems(const QList<QTreeWidgetItem *> &items)
 //关闭给定列中项目的持久编辑器。
 void closePersistentEditor(QTreeWidgetItem *item, int column = 0)
 //列数
 int columnCount() const
 //当前列
 int currentColumn() const
 //当前item
 QTreeWidgetItem *currentItem() const
 //编辑item
 void editItem(QTreeWidgetItem *item, int column = 0)
 //查找item
 QList<QTreeWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const
 QTreeWidgetItem *headerItem() const
 //获取item索引
 QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const
 //返回给定顶级项的索引,如果找不到该项,则返回-1。
 int indexOfTopLevelItem(QTreeWidgetItem *item) const
// 在视图顶层的索引处插入项。
 void insertTopLevelItem(int index, QTreeWidgetItem *item)
 //在视图顶层的索引处插入多个项。
 void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)
 //返回树小部件的不可见根项。
 QTreeWidgetItem *invisibleRootItem() const
 //返回是否为列中的项打开持久化编辑器。
 bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const
 //返回给定项上方的项。
 QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const
 //通过坐标获取项
 QTreeWidgetItem *itemAt(const QPoint &p) const
 QTreeWidgetItem *itemAt(int x, int y) const
 //返回给定项下方的项
 QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const
 //通过索引获取项
 QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const
 //返回按项和给定列指定的单元格中显示的小部件。
 QWidget *itemWidget(QTreeWidgetItem *item, int column) const
 //为给定列中的项打开持久编辑器。
 void openPersistentEditor(QTreeWidgetItem *item, int column = 0)
 //移除给定列中给定项中的小部件集
 void removeItemWidget(QTreeWidgetItem *item, int column)
 //选中多个item
 QList<QTreeWidgetItem *> selectedItems() const
 
//设置列数
 void setColumnCount(int columns)
//设置当前item
 void setCurrentItem(QTreeWidgetItem *item)
 void setCurrentItem(QTreeWidgetItem *item, int column)
 void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command)

//设置表头
 void setHeaderItem(QTreeWidgetItem *item)
 void setHeaderLabel(const QString &label)
 void setHeaderLabels(const QStringList &labels)

//设置要在给定项和列指定的单元格中显示的给定小部件。
 void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget)
//返回用于对小部件内容进行排序的列。
 int sortColumn() const
//按给定列中的值按指定顺序对小部件中的项目进行排序。
 void sortItems(int column, Qt::SortOrder order)

//移除树中给定索引处的顶级项并返回它,否则返回null ptr;
 QTreeWidgetItem *takeTopLevelItem(int index)
//返回给定索引处的顶级项,如果该项不存在,则返回null ptr。
 QTreeWidgetItem *topLevelItem(int index) const
 
 //顶级item数
 int topLevelItemCount() const
 //返回视口中由项所在的项占据的矩形。
 QRect visualItemRect(const QTreeWidgetItem *item) const

实现的虚函数

 virtual void setSelectionModel(QItemSelectionModel *selectionModel) override

公有槽函数

//清空
 void clear()
 //合并
 void collapseItem(const QTreeWidgetItem *item)
 //展开
 void expandItem(const QTreeWidgetItem *item)
 //滚动到
 void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

事件

//当当前项目更改时,会发出此信号。当前项由current指定,这将替换上一个当前项。
 void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
// 当用户通过单键或双击(取决于平台,即QStyle::SH_ItemView_ActivateItemOnSingleClick style提示)或按特殊键(例如Enter)激活项目时,会发出此信号。
 void itemActivated(QTreeWidgetItem *item, int column)
 //当指定项中列的内容发生更改时,将发出此信号。
 void itemChanged(QTreeWidgetItem *item, int column)
// itme被点击
 void itemClicked(QTreeWidgetItem *item, int column)
// item被合并
 void itemCollapsed(QTreeWidgetItem *item)
// item双击
 void itemDoubleClicked(QTreeWidgetItem *item, int column)
// 当鼠标光标进入指定列上的项目时,会发出此信号
 void itemEntered(QTreeWidgetItem *item, int column)
 
//item展开
 void itemExpanded(QTreeWidgetItem *item)
 //item被点击
 void itemPressed(QTreeWidgetItem *item, int column)
// 当树小部件中的选择更改时,会发出此信号
 void itemSelectionChanged()
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。