Trie 树实现
Trim 树是一个树状的数据结构,它可以实现很快的查找与添加。一共有两个函数:insert()
与 query()
。一个实现添加,一个实现查找。
LCR 076. 数组中的第 K 个最大元素
QT学习笔记-事件处理
GUI 应用程序是由事件 (event)驱动的。点击鼠标,按下按键,窗口大小改变等等。
QT 的事件系统
按事件的来源,可以将事件划分为 3 类:
- 自生事件(spontaneous event):由窗口系统产生,如
QKeyEvent
,QMouseEvent
。自生事件会进入系统队列,等待事件循环的处理。 - 发布事件(posted event):是由 qt 应用程序产生,如:
QTimerEvent
。使用QCoreApplication::postEvent()
产生发布事件,等等事件循环的处理。 - 发送事件(sent event):有 QT 或其他程序定向发送的事件。使用
QCoreApplication::sendEvent()
产生发送事件,有对象的event()
函数直接处理。
qt 的主事件循环 QCoreApplication::exec()
从事件队列中获取原生的系统事件,将它们转为 QEvent
,并将转换后的事件发送给 QObject
。任何 QObject
派生的类都可以算是是事件。
QWidget
类重新实现了函数 event()
,并针对一些典型类型的事件定义了专门的事件处理函数。要对一些典型事件进行处理,只需重新实现这些事件处理函数即可。
事件与信号
- 界面组件类的很多俣可以看作是对某些事件的封装,例如
QPushButton
的clicked()
信号,可以看做是对QEvent::MouseButtonRelease
类型事件的封装。 - 但是
Qt
的界面组件只是将少数事件封装成了信号。例如,QLabel
就没有与鼠标双击事件对应的信号。可以从QLabel
派生一个类,把鼠标双击事件转换为发射一个自定义信号doubleClicked()
。即,将mouseDoubleClicked
事件封装为doubleClicked()
信号/
事件过滤器
- 事件过滤器是
QObject
提供的一种处理事件的方法- 它将一个对象的事件委托给另一个对象来监视并处理
拖放事件与拖放操作
拖放时,相当于操作 MIME 数据
QMimeData
用于可存储在剪贴板中的信息,并支持通过拖放机制传输。QMimeData
对象将它们所持有的数据与相应的MIME
类型相关联,以确保信息可以在应用程序内,应用程序之间安全传输。
具有拖放功能的组件
QAbstractItemView
类定义了拖放操作相关的各种函数,通过这些函数的设置,QListView
,QTableView
,QTreeView
及其对应的便利类都具有非常方便的节点拖放操作功能。
QT学习笔记-模型,视图结构
模型/视图结构概述
- 数据(data):如数据库的一个数据表或 SQL 查询结果,内存中的一个字符串,或磁盘文件结构等。
- 模型(model):与数据通信,并为视图组件提供数据接口。
- 视图(view): 是屏幕上的界面组件,视图从数据模型获得每个数据项的模型索引,通过模型索引获取数据
- 代理(delegate):在视图与模型之间交互操作时提供的临时编辑器。模型项视图提供数据是单身的,一般仅用于显示。当需要在视图上编辑数据时,代理会为需要编辑的数据提供一个编辑器。
模型,视图和代理之间使用信号与槽通信。
- 所有基于项(item)的模型类都基于
QAbstractItemModel
(其父类是 QObject) - 模型只是在内存中临时存储数据,模型的数据来源可以是其他类,数据库等
视图组件:显示数据时,只需要调用视图类的 setModel()
函数
便利类:QListWidget
,QTableWidget
,QTreeWidget
- 视图组件不存储数据
- 便利类则为组件的每个节点或单元格创建一个项用项存储数据,格式设置等。
- 便利类没有数据模型,将界面与数据绑定了。
- 便利类缺乏对大型数据源进行灵活处理的能力,适用于小型数据的和显示和编辑。
代理
- 代理就是在视图组件上为编辑数据提供编辑器
- 如在表格组件中编辑一个单元格的数据同时,缺省是使用一个
QLineEdit
编辑框。代理负责从数据模型获取相应的数据,然后显示在编辑器里,修改数据后,又将其保存到数据模型中。
- 如在表格组件中编辑一个单元格的数据同时,缺省是使用一个
QAbstractItemDelegate
是所有代理类的基类。
索引
数据模型中存储数据的基本单元都是项(item),每个项有一个年号,一个万列号,还有一个父项
项的角色:在为数据模型的一个项设置数据时,可以赋予其不同项的角色的数据。
QStringListModel
与 QListView
QStringListModel
是处理字符串列表的模型类,其实例可以作为 QListView
组件的数据模型。这两个类结合构成模型/视图结构,可以在界面上显示和编辑字符串列表。
setStringList()
将模型的内部字符串列表设置为一组字符串。模型将通知任何附着的视图其基础数据已更改。- 提供编辑和修改字符串列表数据的函数,如
insertRows()
,removeRows()
,setData()
;
自定义代理
- 在模型/视图结构中,代理的作用就是在视图组件进入编辑状态编辑某个项时,提供一个临时的编辑器用于数据编辑,默认的代理编辑器是
QLIneEdit
编辑框
QT学习笔记-常用界面组件的使用
QWidget
是所有界面组件类的直接或间接父类。QWidget
的父类是 QObject
与 QPaintDevice
。
Widget
组件:所有界面组件的统称,它从操作系统接收鼠标,键盘和其他事件,并在屏幕上显示自己,每个组件都是矩形的,并且按 z 轴顺序排列。
window
:没有嵌入到父组件中的组件。通常,有一个 frame 和一个标题栏,可以使用 window flags
创建没有这两个装饰的窗口。在 Qt 中,QMainWindow
和 QDialog
的各种子类是最常用的 window 类型。
LCR 051. 二叉树中的最大路径和
题目描述
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给定一个二叉树的根节点 root
,返回其 最大路径和,即所有路径上节点值之和的最大值。
题目来源:来源:力扣(LeetCode)