C++实现单例模式
记录一下自己在写代码时遇到的坑。。。
单例模式:
- 单例模式确保一个类只有一个实例,并提供一个全局访问点。
- 它可以保持一个类的状态,并在应用程序的不同部分之间共享这个状态。
- 单例通常在需要严格控制如何和何时访问资源的情况下使用,例如配置管理器或日志记录器。
- 单例模式可能会导致代码之间的高耦合度,并且在多线程环境中可能需要额外的同步机制。
记录一下自己在写代码时遇到的坑。。。
单例模式:
Trim 树是一个树状的数据结构,它可以实现很快的查找与添加。一共有两个函数:insert() 与 query()。一个实现添加,一个实现查找。
GUI 应用程序是由事件 (event)驱动的。点击鼠标,按下按键,窗口大小改变等等。
按事件的来源,可以将事件划分为 3 类:
QKeyEvent,QMouseEvent。自生事件会进入系统队列,等待事件循环的处理。QTimerEvent。使用 QCoreApplication::postEvent() 产生发布事件,等等事件循环的处理。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 及其对应的便利类都具有非常方便的节点拖放操作功能。模型,视图和代理之间使用信号与槽通信。
QAbstractItemModel (其父类是 QObject)视图组件:显示数据时,只需要调用视图类的 setModel() 函数
便利类:QListWidget,QTableWidget,QTreeWidget
QLineEdit 编辑框。代理负责从数据模型获取相应的数据,然后显示在编辑器里,修改数据后,又将其保存到数据模型中。QAbstractItemDelegate 是所有代理类的基类。数据模型中存储数据的基本单元都是项(item),每个项有一个年号,一个万列号,还有一个父项
项的角色:在为数据模型的一个项设置数据时,可以赋予其不同项的角色的数据。
QStringListModel 与 QListViewQStringListModel 是处理字符串列表的模型类,其实例可以作为 QListView 组件的数据模型。这两个类结合构成模型/视图结构,可以在界面上显示和编辑字符串列表。
setStringList() 将模型的内部字符串列表设置为一组字符串。模型将通知任何附着的视图其基础数据已更改。insertRows(),removeRows(),setData();QLIneEdit 编辑框QWidget 是所有界面组件类的直接或间接父类。QWidget 的父类是 QObject 与 QPaintDevice。
Widget 组件:所有界面组件的统称,它从操作系统接收鼠标,键盘和其他事件,并在屏幕上显示自己,每个组件都是矩形的,并且按 z 轴顺序排列。
window:没有嵌入到父组件中的组件。通常,有一个 frame 和一个标题栏,可以使用 window flags 创建没有这两个装饰的窗口。在 Qt 中,QMainWindow 和 QDialog 的各种子类是最常用的 window 类型。