Qt树形结构数据展示-QTreeView
Qt树形结构数据显示,QTreeView
QTreeView介绍
QTreeView是Qt框架中的一个控件类,用于显示和管理树形结构的数据。它基于Model/View架构,通过与相应的数据模型进行交互,提供了丰富的功能和灵活性。以下是QTreeView的详细介绍:
-
数据模型:QTreeView依赖于一个数据模型来提供数据。数据模型可以是QAbstractItemModel的子类,例如QStandardItemModel或自定义的数据模型。通过设置数据模型,QTreeView可以获得树形结构的数据,并将其显示在界面上。
-
树形结构:QTreeView以树状结构的形式展示数据。每个节点代表一个项,可以包含子节点,形成树的分支。用户可以展开和折叠节点,以在视图中查看不同级别的数据。
-
列标题:QTreeView支持多列显示,每一列可以有一个标题(表头)。开发者可以使用setHeaderLabels()方法设置列标题,使数据按列进行组织和展示。
-
根节点:树形结构的顶层节点称为根节点。QTreeView可以显示一个或多个根节点。使用setRootIndex()方法可以设置根节点的索引,如果不设置,则默认将所有项都作为根节点来显示。
-
展开和折叠:用户可以通过点击加号或减号图标来展开和折叠节点。展开节点会显示它的子节点,折叠节点则隐藏它的子节点。QTreeView提供了相关方法(如expand()和collapse())来编程控制节点的展开和折叠。
-
选择和编辑:用户可以使用鼠标或键盘在QTreeView中选择和编辑项。QTreeView支持单选和多选模式,并提供相关信号和方法来获取和操作选择的项。用户还可以通过编辑模式对项进行编辑,例如修改文本或更改数据。
-
滚动和定位:当视图中的项数量超过可见区域时,QTreeView会自动提供滚动条。开发者可以使用scrollTo()方法将特定的项滚动到可见区域,以便用户查看或操作。
-
信号和槽:QTreeView提供了一系列信号来响应用户的交互操作,例如项的点击、选择变化等。通过连接这些信号和自定义的槽函数,开发者可以实现针对不同交互事件的响应逻辑。
-
样式和外观:QTreeView的外观可以通过样式表进行定制,使其与应用程序的整体风格保持一致。可以改变项的颜色、字体、背景等,以及自定义图标和样式。
总之,QTreeView是一个功能强大、高度可定制的树形结构显示控件。它通过数据模型提供数据,展示多层级的树形结构,并支持选择、展开折叠、编辑等交互操作,为开发者提供了灵活性和便捷性。通过QTreeView,开发者可以快速构建出直观、易用的树状数据展示界面。
QTreeView接口
以下是QTreeView的常用接口:
-
构造函数:QTreeView(QWidget *parent = nullptr)。创建一个空的树形视图。
-
setModel(QAbstractItemModel *model):设置树形视图的数据模型,即QAbstractItemModel的子类对象,用于提供数据。
-
model() const:返回与树形视图关联的数据模型。
-
setRootIndex(const QModelIndex &index):设置根节点的索引。
-
rootIndex() const:返回根节点的索引。
-
setHeaderLabels(const QStringList &labels):设置树形视图的列标题(表头)。
-
headerLabels() const:返回树形视图的列标题。
-
setColumnWidth(int column, int width):设置指定列的宽度。
-
expand(const QModelIndex &index):展开指定索引的项及其子项。
-
collapse(const QModelIndex &index):折叠指定索引的项及其子项。
-
expandAll():展开所有项。
-
collapseAll():折叠所有项。
-
currentIndex() const:返回当前选择的项的索引。
-
selectionModel() const:返回与树形视图关联的选择模型。
-
scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible):将项滚动到可见区域。
-
edit(const QModelIndex &index):编辑指定索引的项。
-
show():显示树形视图。
-
hide():隐藏树形视图。
-
setFixedSize(int width, int height):设置固定的宽度和高度。
-
clicked(const QModelIndex &index):点击指定索引的项时触发的信号。
这些接口提供了QTreeView的基本功能,包括设置数据模型、展开和折叠项、选择项、滚动、编辑等操作,使得开发者可以方便地创建和管理树形结构的数据。
QStandardItemModel介绍及接口
Qt表格数据处理_zw_ggr_2017的博客-CSDN博客
QStandardItem介绍及接口
Qt表格数据处理_zw_ggr_2017的博客-CSDN博客
代码演示
#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QDebug>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
// 创建主窗口和树形控件
QTreeView treeView;
treeView.setWindowTitle("分类目录演示");
// 创建标准模型
QStandardItemModel model;
model.setHorizontalHeaderLabels(QStringList() << "分类" << "具体项目");
// 创建根节点
QStandardItem* rootItem = new QStandardItem("电子产品");
// 创建子节点和具体项目
QStandardItem* phoneItem = new QStandardItem("手机");
QStandardItem* appleItem = new QStandardItem("苹果");
appleItem->setData("Apple Inc.", Qt::UserRole); // 设置自定义数据
QStandardItem* iphone12Item = new QStandardItem("iPhone 12");
iphone12Item->setData("2020年发布的新款iPhone", Qt::UserRole);
QStandardItem* iphone11Item = new QStandardItem("iPhone 11");
iphone11Item->setData("2019年发布的iPhone", Qt::UserRole);
QStandardItem* xiaomiItem = new QStandardItem("小米");
xiaomiItem->setData("小米科技有限责任公司", Qt::UserRole);
QStandardItem* mi11Item = new QStandardItem("小米11");
mi11Item->setData("小米的旗舰手机", Qt::UserRole);
QStandardItem* redmiNote9Item = new QStandardItem("红米Note 9");
redmiNote9Item->setData("小米旗下的低价手机", Qt::UserRole);
QStandardItem* computerItem = new QStandardItem("电脑");
QStandardItem* lenovoItem = new QStandardItem("联想");
lenovoItem->setData("Lenovo Inc.", Qt::UserRole);
QStandardItem* xiaoxinItem = new QStandardItem("联想小新");
xiaoxinItem->setData("联想旗下的性价比电脑", Qt::UserRole);
QStandardItem* zhengjiuzheItem = new QStandardItem("联想拯救者");
zhengjiuzheItem->setData("联想旗下的游戏电脑", Qt::UserRole);
QStandardItem* huaweiItem = new QStandardItem("华为");
huaweiItem->setData("HUAWEI Inc.", Qt::UserRole);
QStandardItem* bookDItem = new QStandardItem("华为 matebook16d");
bookDItem->setData("华为旗下的中端电脑", Qt::UserRole);
QStandardItem* bookSItem = new QStandardItem("华为 matebook16s");
bookSItem->setData("华为旗下旗舰电脑", Qt::UserRole);
// 将子节点添加到根节点
rootItem->appendRow(phoneItem);
phoneItem->appendRow(appleItem);
appleItem->appendRow(iphone12Item);
appleItem->appendRow(iphone11Item);
phoneItem->appendRow(xiaomiItem);
xiaomiItem->appendRow(mi11Item);
xiaomiItem->appendRow(redmiNote9Item);
rootItem->appendRow(computerItem);
computerItem->appendRow(lenovoItem);
lenovoItem->appendRow(xiaoxinItem);
lenovoItem->appendRow(zhengjiuzheItem);
computerItem->appendRow(huaweiItem);
huaweiItem->appendRow(bookDItem);
huaweiItem->appendRow(bookSItem);
// 将根节点设置给模型
model.appendRow(rootItem);
// 设置模型给树形控件
treeView.setModel(&model);
// 点击项时输出相关文本和数据
QObject::connect(&treeView, &QTreeView::clicked, [&](const QModelIndex& index) {
QString itemText = model.itemData(index)[Qt::DisplayRole].toString();
QVariant itemData = model.itemData(index)[Qt::UserRole];
qDebug() << "具体项目:" << itemText;
qDebug() << "数据:" << itemData;
});
treeView.expandAll();
// 显示主窗口
treeView.show();
treeView.setFixedSize(600, 600);
return a.exec();
}
运行界面:
依次点击各个项:
具体项目: "iPhone 12"
数据: QVariant(QString, "2020年发布的新款iPhone")
具体项目: "iPhone 11"
数据: QVariant(QString, "2019年发布的iPhone")
具体项目: "小米11"
数据: QVariant(QString, "小米的旗舰手机")
具体项目: "红米Note 9"
数据: QVariant(QString, "小米旗下的低价手机")
具体项目: "联想小新"
数据: QVariant(QString, "联想旗下的性价比电脑")
具体项目: "联想拯救者"
数据: QVariant(QString, "联想旗下的游戏电脑")
具体项目: "华为 matebook16d"
数据: QVariant(QString, "华为旗下的中端电脑")
具体项目: "华为 matebook16s"
数据: QVariant(QString, "华为旗下旗舰电脑")
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)