QT视图界面

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

一、四大标准 View(Model/View 架构)

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

  1. QListView ------ 列表/图标视图

一维数据:单列列表、图标列表。

典型:文件列表、联系人列表。

  1. QTableView ------ 表格视图

二维数据:行+列,像 Excel。

典型:数据库查询结果、表格数据。

  1. QTreeView ------ 树形视图

层级/树状数据,可折叠展开。

典型:文件系统、目录树、层级菜单。

  1. 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 → 适用场景"的速记表,面试前看一眼就记住?

相关推荐
扶尔魔ocy18 小时前
【qt openGL入门笔记】windows编译MinGW版本的osgearth(2.10.1)
qt·opengl·osg
小王C语言1 天前
Qt常用控件:按钮类控件,普通按键、单选、复选
开发语言·qt
初阳7851 天前
【基于Qt5仿音乐播放器(六)】——细节打磨与总结
qt·1024程序员节
小鱼仙官2 天前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
扶尔魔ocy2 天前
【QT OpenGL】知识点编目及传送门
qt·opengl·osg
qq_401700412 天前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
GreenHandBruce2 天前
基于Qt 6.12.0 + FFmpeg 9.0.2的4k视频播放器
qt·ffmpeg·音视频
誰能久伴不乏2 天前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
沫璃染墨3 天前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
小豆庄3 天前
视频脱敏引擎的追踪难题:转场误判定、ID撞号和淡入窗口
qt·算法·目标检测·音视频·视频·敏捷流程