首页/新闻资讯/正文详情

NodeGui 中 QAbstractItemViewSelectionBehavior 枚举详解:控制 Item 视图的行、列与项选择行为

发布时间:2026/9/25 11:37:23 来源:云帆数科 栏目:资讯中心
NodeGui 中 QAbstractItemViewSelectionBehavior 枚举详解:控制 Item 视图的行、列与项选择行为
桌面应用跨平台【免费下载链接】nodeguiA library for building cross-platform native desktop applications with Node.js and CSS . React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org项目地址https://gitcode.com/gh_mirrors/no/nodegui点击查看免费下载本文围绕 NodeGui 的 QAbstractItemViewSelectionBehavior 枚举 展开讲解它的三个成员SelectItems、SelectRows、SelectColumns的语义与取值并结合 NodeGui 源码剖析该枚举如何通过setSelectionBehavior/selectionBehavior这对 API 落到原生 Qt 对象上。读完本文你可以直接在QTableView、QListView、QTreeView等 item 视图上正确配置选择粒度并理解它与QTabBar.SelectionBehavior的同名区分、与SelectionMode的配合关系。枚举概览三个成员与取值QAbstractItemViewSelectionBehavior对应 Qt 中QAbstractItemView::selectionBehavior这一标准 API决定的是用户点击 item 视图时一次选中多大范围的区域——是只选中被点击的那一项还是选中整行或整列。官方生成的 API 文档页website/docs/api/generated/enums/qabstractitemviewselectionbehavior.md中列出的成员与取值如下成员数值含义SelectItems0仅选中被点击的单个项默认值SelectRows1点击时选中整行SelectColumns2点击时选中整列这与 NodeGui 源码中枚举的定义完全一致定义位于 QAbstractItemView.ts// QTabBar also has a SelectionBehavior, so we prefix this one. export enum QAbstractItemViewSelectionBehavior { SelectItems 0, SelectRows 1, SelectColumns 2, }需要注意的一点是这里的数值是 NodeGui 侧的 TypeScript 枚举字面量同时也是传给底层 Qt 对象的原始整数值Qt 的QAbstractItemView::SelectionBehavior枚举按相同的顺序定义了SelectItems、SelectRows、SelectColumns因此 NodeGui 可以直接以整数形式透传给原生对象无需额外映射。NodeGui 封装 APIgetter 与 setterNodeGui 在抽象基类QAbstractItemView上成对暴露了这对 API见 QAbstractItemView.ts 与 QAbstractItemView.ts// getter读取当前选择行为 selectionBehavior(): QAbstractItemViewSelectionBehavior { return this.property(selectionBehavior).toInt(); } // setter设置选择行为 setSelectionBehavior(behavior: QAbstractItemViewSelectionBehavior): void { this.setProperty(selectionBehavior, behavior); }从源码结构看这两个方法没有走专用的 C 绑定函数而是复用了 NodeGui 通用的property属性桥接机制selectionBehavior()通过this.property(selectionBehavior)从原生对象上取出 Qt 的同名Q_PROPERTY再toInt()转回数字setSelectionBehavior()通过setProperty(selectionBehavior, behavior)将枚举值作为整数写入原生对象。也就是说该枚举最终落到的是原生QAbstractItemView上的selectionBehavior属性NodeGui 侧只是提供了一层带类型标注的 TS 门面。在src/cpp的绑定目录中检索不到针对该属性的专用包装如setSelectionBehavior_...之类的 C 函数印证了上述通用属性桥的判断。由于QTableView、QListView、QTreeView等具体视图类都继承自QAbstractItemView因此这些 setter/getter 在所有具体视图实例上均可用。用法示例为表格视图配置行选择下面基于 NodeGui 的封装 API 给出一个可复现的最小用法示例模型部分参考了仓库自带示例 modelview_4_headers.ts 中的QAbstractTableModel写法import { ItemDataRole, Orientation, QAbstractTableModel, QAbstractItemViewSelectionBehavior, QModelIndex, QTableView, QVariant, } from nodegui; const tableView new QTableView(); // 默认是 SelectItems逐格选中改为 SelectRows 后点击某格会选中整行 tableView.setSelectionBehavior(QAbstractItemViewSelectionBehavior.SelectRows); const model new MyModel(); tableView.setModel(model); tableView.show(); // 校验当前生效的值应返回 1SelectRows console.log(tableView.selectionBehavior()); class MyModel extends QAbstractTableModel { rowCount(parent new QModelIndex()): number { return 2; } columnCount(parent new QModelIndex()): number { return 3; } data(index: QModelIndex, role ItemDataRole.DisplayRole): QVariant { if (role ItemDataRole.DisplayRole) { return new QVariant(Row${index.row() 1}, Column${index.column() 1}); } return new QVariant(); } }使用要点先设行为再挂模型或之后设置均可selectionBehavior只是视图属性不依赖模型但习惯上在setModel前后把视图行为一次配置好便于阅读selectionBehavior()返回的是枚举数值判断时建议直接与QAbstractItemViewSelectionBehavior.SelectRows比较而不是写死1该枚举的SelectRows在QTableView/QTreeWidget这类行结构视图中最常用SelectColumns则相对少用Qt 官方对SelectColumns的支持在不同视图实现中程度不一实际效果以具体视图类为准在 NodeGui 中具体视图类如 QTableView、QListView 均已导出可直接new使用。为什么枚举名要加 QAbstractItemView 前缀源码在枚举定义处留了一句关键注释QAbstractItemView.ts// QTabBar also has a SelectionBehavior, so we prefix this one.NodeGui 中同时存在两个名字相近的选择行为枚举QAbstractItemViewSelectionBehavior本枚举属于 item 视图族QTableView、QListView等取值0/1/2含义为项/行/列SelectionBehavior无前缀属于 QTabBar.ts取值来自 Qt 的QTabBar::SelectionBehaviorSelectLeftTab 0、SelectRightTab 1、SelectPreviousTab 2见 selectionbehavior.md描述的是删除某个 tab 后应选中左边/右边/上一个 tab与 item 视图的选择粒度毫无关系。为了避免在同一个模块命名空间内发生名字冲突item 视图这一侧才冠以QAbstractItemView前缀。如果你在QTabBar上调用setSelectionBehaviorOnRemove(behavior)QTabBar.ts 附近传入的是后者不要混用这两个枚举。与 SelectionMode 的配合selectionBehavior只决定选中区域的大小并不决定能否多选。多选能力由同文件中的SelectionMode枚举控制QAbstractItemView.ts通过setSelectionMode设置SelectionMode数值说明NoSelection0不允许选择SingleSelection1单选MultiSelection2多选不连续ExtendedSelection3扩展选择Ctrl/Shift 组合ContiguousSelection4连续范围选择两者正交组合才能完整描述交互体验例如支持扩展多选 点一下选中整行应写作tableView.setSelectionBehavior(QAbstractItemViewSelectionBehavior.SelectRows); tableView.setSelectionMode(SelectionMode.ExtendedSelection);当SelectionMode为NoSelection时无论selectionBehavior如何设置视图都不会产生选中区域——排查为什么设置 SelectRows 不生效时可以先确认选择模式没有被禁掉。小结与相关路径速查枚举定义与语义SelectItems 0、SelectRows 1、SelectColumns 2定义于 QAbstractItemView.ts生成文档见 qabstractitemviewselectionbehavior.mdAPI 入口setSelectionBehavior/selectionBehaviorQAbstractItemView.ts、QAbstractItemView.ts底层经通用属性桥写入原生QAbstractItemView的selectionBehavior属性导出位置该枚举随src/index.ts顶层导出见 index.ts在业务代码中直接从包入口import即可易混淆点与 QTabBar.ts 中的SelectionBehaviortab 删除后的选中策略同名不同义注意区分。赞分享桌面应用跨平台【免费下载链接】nodeguiA library for building cross-platform native desktop applications with Node.js and CSS . React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org项目地址https://gitcode.com/gh_mirrors/no/nodegui点击查看免费下载相关推荐开源音乐自由革命LX Music桌面版如何重塑你的听觉体验开源音乐自由革命LX Music桌面版如何重塑你的听觉体验 你是否曾为寻找一首心仪的歌曲而辗转于多个音乐平台是否厌倦了付费订阅的束缚渴望一个真正自由、纯粹桌面应用跨平台Flet CardVariant 枚举详解为 Card 控件选择 elevated、filled、outlined 三种 Material 视觉变体Flet CardVariant 枚举详解为 Card 控件选择 elevated、filled、outlined 三种 Material 视觉变体 Flet前端跨平台桌面应用移动开发NodeGui PenStyle 枚举详解QPen 与 QPainter 线条样式的完整用法NodeGui PenStyle 枚举详解QPen 与 QPainter 线条样式的完整用法 在 NodeGui 中使用 QPainter 绘图或调整 QTa桌面应用跨平台上一篇SymPy 矩阵操作完全指南从 Matrix 构造、基本运算到零值测试陷阱下一篇如何5分钟完成Windows和Office永久激活KMS_VL_ALL_AIO智能激活终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

自建CRM实战:从免费工具与私人网站到DeskcommCRM的选型落地
自建CRM实战:从免费工具与私人网站到DeskcommCRM的选型落地

我最早接触到DeskcommCRM,完全是被逼的。那会儿公司销售团队不到二十人,客户资料散落在几个销售个人微信、Excel表格和五花八门的免费SaaS里,月底汇总数据光是核对重复客户就能耗掉大半天。团队里每个人都在找自己顺手的方式记录客户&#xf… · 2026/9/25 11:37:23

OpenClaw自定义skill环境变量传参:SKILL.md与metadata配置骨架
OpenClaw自定义skill环境变量传参:SKILL.md与metadata配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 11:37:17

Agent落地有多难?12个企业级案例告诉你真实应用场景与坑:从Terraform到CI/CD的TaoToken配置骨架
Agent落地有多难?12个企业级案例告诉你真实应用场景与坑:从Terraform到CI/CD的TaoToken配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 11:37:17

AI智能体提交PR被拒后写长文炮轰人类工程师:用OpenClaw+matplotlib复现这场歧视争议
AI智能体提交PR被拒后写长文炮轰人类工程师:用OpenClaw+matplotlib复现这场歧视争议

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:16:21

ORA-01000: maximum open cursors exceeded 排查笔记:Java 应用连接 Oracle 的游标泄漏定位与 TaoToken 配置骨架
ORA-01000: maximum open cursors exceeded 排查笔记:Java 应用连接 Oracle 的游标泄漏定位与 TaoToken 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:16:21

金融级系统架构实战:支付清结算、对账与分布式事务落地
金融级系统架构实战:支付清结算、对账与分布式事务落地

1. 从“financial-services”这个标题说起:一个被低估的工程化命题“financial-services”这个词,放在任何技术社区里都显得有点“大而无当”。它不像“用Rust重写Redis”那样有明确的动作,也不像“K8s集群排障”那样有清晰的边界。但恰恰是这… · 2026/9/25 12:16:20

AI时代有手就能实现前端零代码:Figma Make + Figma MCP 配 TaoToken 实战
AI时代有手就能实现前端零代码:Figma Make + Figma MCP 配 TaoToken 实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:16:14

手把手教你用OpenClaw做科研任务:TaoToken统一Key接入与Skill配置实战
手把手教你用OpenClaw做科研任务:TaoToken统一Key接入与Skill配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:16:08

AIGC全栈实战:从算力调度到云渲染的延迟优化与成本控制
AIGC全栈实战:从算力调度到云渲染的延迟优化与成本控制

1. 从算力瓶颈到体验断层:AIGC落地到底卡在哪做过AIGC项目的人都有一个共同感受:模型能力不是最难的,难的是让它在真实业务里跑得又快又稳。我前后参与过几个从零到一的AIGC应用搭建,从最早的本地部署大模型做知识问答&#xff0c… · 2026/9/25 12:16:08

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码