三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

QT视图界面

QT视图界面

先一句话说清楚:Qt 里没有直接叫 QView 的类,所有“视图”都继承自 QAbstractItemView,常用的有 4 种标准 View,外加对应的“便捷 Widget”。下面直接给你面试版总结 + 代码小例子。
一、四大标准 View(Model/View 架构)

都在 #include <QXXXView>,数据和界面分离,可以共用 Model。

1. QListView —— 列表/图标视图
一维数据:单列列表、图标列表。
典型:文件列表、联系人列表。
2. QTableView —— 表格视图
二维数据:行+列,像 Excel。
典型:数据库查询结果、表格数据。
3. QTreeView —— 树形视图
层级/树状数据,可折叠展开。
典型:文件系统、目录树、层级菜单。
4. QColumnView —— 多列级联视图
像 Mac Finder 那种,每级一列。
典型:多级目录选择。
关系一句话

• 基类:QAbstractItemView

• 四大子类:QListView / QTableView / QTreeView / QColumnView

• 配套:Model(数据)+ Delegate(渲染/编辑)
二、对应的“便捷 Widget”(不分离 Model/View)

新手常混,面试最好区分:

• QListView → QListWidget

• QTableView → QTableWidget

• QTreeView → QTreeWidget

特点:

• 内部自带 Model,不用自己写 Model,直接 addItem。

• 缺点:不能共享 Model、灵活性差。
三、极简代码示例(面试可写)

1)QListView + QStringListModel(标准用法)
QListView *listView = new QListView(this);
QStringListModel *model = new QStringListModel(this);
model->setStringList({"Apple","Banana","Cherry"});
listView->setModel(model);
2)QTableView + QStandardItemModel
QTableView *tableView = new QTableView(this);
QStandardItemModel *model = new QStandardItemModel(2,2,this);
model->setItem(0,0,new QStandardItem("Name"));
model->setItem(0,1,new QStandardItem("Age"));
tableView->setModel(model);
3)QTreeView + QStandardItemModel
QTreeView *treeView = new QTreeView(this);
QStandardItemModel *model = new QStandardItemModel(this);
QStandardItem *root = model->invisibleRootItem();
QStandardItem *node = new QStandardItem("Folder");
node->appendRow(new QStandardItem("file.txt"));
root->appendRow(node);
treeView->setModel(model);
四、面试一句话总结(背这个)

Qt 的 View 都继承自 QAbstractItemView,常用有 QListView、QTableView、QTreeView、QColumnView;它们遵循 Model/View 架构,数据和界面分离,可共享 Model。另外还有便捷类 QListWidget/QTableWidget/QTreeWidget,内部自带 Model,适合简单场景。
要不要我给你画一张“View → 便捷Widget → 适用场景”的速记表,面试前看一眼就记住?

← 返回列表