本文章是《Qt入门到放弃2023版》的学习的第5章节
0. 概要
对比来看,QT是包含了C++语言的一种GUI库,可以和WPF(C#)作为对比。
当QT作为一种语言来比较时都有一个基类、基本类型、字符串、数组集合、文件操作、日期时间等常用类。
当QT作为一种GUI库来比较时都有Application,窗口,弹窗,布局控件,显示控件等。
本文就QT的一些语言特性作为其切入点展开学习,由于内容过多,文本先做一些基本的对比,后续会逐步详细记录学习的具体类的使用。
QT(C++) | WPF(C#) | |
---|---|---|
基本数据类型 | C++:int,short,long,float,double,char,bool, QChar,QByteArray,QVariant等 |
int,short,long,float,double,char,bool,BitArray |
基类 | QObject | Object |
集合 | QList,QMap,QVector,QHash,QSet,QLinkedList,QStack,QQueue,QPair,QMultiMap,QMultiHash | List,Dictionary,Set,HashSet,Queue,Stack,ArrayList,HashTable,SortedSet,LinkedList,ConcurrentDictionary |
日期时间 | QDateTime,,QTime,QDate,QTimeZone,QElapsedTimer,QLocale,QCalendarWidget(UI) | DateTime,DateTimeOffset,TimeSpan,Calendar(UI),DateTimeFormatInfo,CultureInfo |
文件 | QFile,QDir,QFileInfo,QFileSystemModel,QStandardPaths,QTemporaryFile,QSaveFile,QDataStream | File,Directory,Path,DirectoryInfo,FileInfo |
IO | QDataStream,QTextStream,QBuffer | Stream,FileStream,MemoryStream,NetworkStream,PipedStream,StreamReader,StreamWriter |
网络 | QTcpSocket,QTcpServer,QUdpSocket,QNetworkRequest,QNetworkReply等 | System.Net 命名空间下的类 |
1. 基本类型
在 C++ 和 C# 中的基本数据类型含义和大小大致相同,但是 Qt 引入了一些独特的数据类型来支持其框架的功能。在 C++ 中:
int
:通常是 4 字节(32 位)整数。short
:通常是 2 字节(16 位)整数。long
:通常是 4 字节或 8 字节整数,具体取决于编译器和平台。float
:单精度浮点数,通常是 4 字节。double
:双精度浮点数,通常是 8 字节。char
:通常是 1 字节,表示字符。bool
:通常是 1 字节,表示布尔值。
在 Qt 中:
QChar
:QChar
是 Qt 中的字符数据类型,它通常是 2 字节,用于支持 Unicode 字符。QByteArray
:QByteArray
是 Qt 中的字节数组类型,用于处理二进制数据。它允许在不考虑字符编码的情况下存储和操作二进制数据。QVariant
:QVariant
是 Qt 中的通用数据类型,可以存储各种类型的数据。它通常用于容器和数据模型中,以处理不同类型的数据。
代码示例如下:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
//基本数据类型
int integerNumber = 42;
short shortNumber = 32767;
long longNumber = 1234567890;
float floatNumber = 3.14f;
double doubleNumber = 3.141592653589793;
char character = 'A';
bool isTrue = true;
QChar myChar = 'A'; // 定义一个 QChar 表示字符 'A'
qDebug() << "QChar value: " << myChar;
QByteArray byteArray;
byteArray.append(0x48); // 添加字节数据
byteArray.append(0x65);
byteArray.append(0x6C);
byteArray.append(0x6C);
byteArray.append(0x6F);
qDebug() << "QByteArray data: " << byteArray;
QVariant var;
var = 42; // 存储整数
qDebug() << "Stored integer: " << var.toInt();
var = "Hello, Qt!"; // 存储字符串
qDebug() << "Stored string: " << var.toString();
return app.exec();
}
2. QObject
在Qt中, QObject是一个重要的类:
The QObject class is the base class of all Qt objects.
QObject 是 Qt 对象模型的核心。在这个模型中,最重要的特性是一种非常强大的被称为信号和槽(signals and slots)的机制,用于实现无缝对象间通信。你可以使用 connect() 将一个信号连接到一个槽,并使用 disconnect() 断开连接。为了避免无限通知循环,你可以使用 blockSignals() 暂时阻止信号。受保护的函数 connectNotify() 和 disconnectNotify() 允许跟踪连接。
- 信号(Signals): 信号是QObject派生类所定义的特殊函数,用于表示某个事件已经发生或状态已经改变。当特定的条件满足时,对象可以发出一个信号,通知其他对象,该条件已经发生。信号是不带具体实现的,只有函数签名,通常在类的
signals
部分声明。 - 槽(Slots): 槽是响应信号的函数,它包含实际的代码。槽是普通的C++函数,它们在QObject派生类中定义,并负责执行特定的操作。槽函数的名称可以自由选择,只要它们与信号相对应的参数匹配即可。
- 连接(Connection): 连接是将信号与槽关联的过程。使用
QObject::connect
函数,您可以建立信号与槽之间的连接,这意味着当信号被发射时,相关联的槽将被调用。
**需要注意的是:**这里提到的是 QObject是很多Qt类的父类, 并不是像 C# 那样 Object是所有类的父类。
QObject的子类按照用途分为以下几类:
Qt 动画和多媒体类:
- QAbstractAnimation: 用于动画抽象基类。
- QMovie: 用于电影和动画。
- QAnimationGroup: 用于动画组合。
- QMediaContent: 用于多媒体内容。
- QMediaPlaylist: 用于多媒体播放列表。
- QMediaRecorder: 用于多媒体录制。
- QCamera: 用于摄像头控制。
- QCameraImageCapture: 用于摄像头图像捕获。
- QCameraViewfinderSettings: 用于摄像头取景器设置。
Qt 事件处理和调度类:
- QAbstractEventDispatcher: 用于事件分发器。
- QCoreAppliacation: 用于核心应用程序类。
Qt 模型-视图类:
- QAbstractItemDelegate: 用于项委托。
- QAbstractItemModel: 用于项模型。
Qt 网络和通信类:
- QAbstractNetworkCache: 用于抽象网络缓存。
- QNetworkAccessManager: 用于网络访问管理。
- QNetworkConfigurationManager: 用于网络配置管理。
- QNetworkCookieJar: 用于网络 Cookie 管理。
- QNetworkSession: 用于网络会话。
Qt 插件和扩展类:
- QDesignerFormEditorInterface: 用于设计器表单编辑接口。
- QDesignerFormWindowManagerInterface: 用于设计器表单窗口管理接口。
- QQmlEngineExtensionPlugin: 用于 QML 引擎扩展插件。
Qt 图形和渲染类:
- QAbstractGraphicsShapeItem: 用于抽象图形形状项。
- QGraphicsAnchor: 用于图形锚点。
- QGraphicsEffect: 用于图形效果。
- QGraphicsItemAnimation: 用于图形项动画。
- QGraphicsObject: 用于图形对象。
- QGraphicsScene: 用于图形场景。
- QGraphicsTransform: 用于图形变换。
Qt 多媒体和音频类:
- QAudioDecoder: 用于音频解码器。
- QAudioEncoderSettings: 用于音频编码设置。
- QMultimedia: 用于多媒体类。
Qt 按钮和操作类:
- QButtonGroup: 用于按钮组。
- QAction: 用于动作。
- QActionGroup: 用于动作组。
- QShortcut: 用于快捷键。
Qt 拓展和插件类:
- QAxFactory: 用于 ActiveX 工厂。
- QAxObject: 用于 ActiveX 对象。
- QAxScript: 用于 ActiveX 脚本。
- QAxScriptManager: 用于 ActiveX 脚本管理。
Qt 剪贴板和文本编辑类:
- QClipboard: 用于剪贴板。
- QTextDocument: 用于文本文档。
Qt 数据和模型类:
- QCompleter: 用于自动完成。
- QDataWidgetMapper: 用于数据部件映射。
- QItemSelectionModel: 用于项选择模型。
Qt 事件处理和调度类:
- QEventLoop: 用于事件循环。
Qt 插件和扩展类:
- QExtensionFactory: 用于扩展工厂。
- QExtensionManager: 用于扩展管理。
- QPluginLoader: 用于插件加载。
- QLibrary: 用于动态链接库加载。
Qt 文件和数据类:
- QFileSelector: 用于文件选择器。
- QFileSystemWatcher: 用于文件系统监视。
- QIODevice: 用于输入/输出设备。
- QFile: 用于文件操作。
- QDir: 用于目录操作。
Qt 图形和图像类:
- QImageIOPlugin: 用于图像 I/O 插件。
- QImageReader: 用于图像读取。
- QImageWriter: 用于图像写入。
Qt 手势和输入类:
- QGesture: 用于手势。
Qt 图形和渲染类:
- QScreen: 用于屏幕管理。
- QSGTexture: 用于场景图形纹理。
Qt 文档和文本类:
- QTextDocument: 用于文本文档。
- QTextObject: 用于文本对象。
- QAbstractTextDocumentLayout: 用于文本文档布局。
Qt 用户界面和操作类:
- QSystemTrayIcon: 用于系统托盘图标。
- QWidget: 用于用户界面部件。
Qt 图形渲染和绘制类:
- QSGAbstractRenderer: 用于场景图形渲染器。
- QSGEngine: 用于场景图形引擎。
- QSGTexture: 用于场景图形纹理。
- QSGTextureProvider: 用于场景图形纹理提供者。
Qt OpenGL 类:
- QOpenGLContext: 用于 OpenGL 上下文。
- QOpenGLContextGroup: 用于 OpenGL 上下文组。
- QOpenGLDebugLogger: 用于 OpenGL 调试日志。
- QOpenGLShader: 用于 OpenGL 着色器。
- QOpenGLShaderProgram: 用于 OpenGL 着色器程序。
- QOpenGLTimeMonitor: 用于 OpenGL 时间监视。
- QOpenGLTimerQuery: 用于 OpenGL 定时器查询。
- QOpenGLVertexArrayObject: 用于 OpenGL 顶点数组对象。
Qt 数据存储类:
- QSettings: 用于应用程序设置存储。
Qt 并发和多线程类:
- QThread: 用于线程管理。
- QThreadPool: 用于线程池。
Qt 定时和计时类:
- QTimeLine: 用于时间线。
- QTimer: 用于定时器。
Qt 国际化和本地化类:
- QTranslator: 用于翻译器。
Qt 撤销和重做类:
- QUndoGroup: 用于撤销组。
- QUndoStack: 用于撤销栈。
Qt 校验和验证类:
- QValidator: 用于验证器。
Qt 窗口和视图类:
- QWindow: 用于窗口管理。
- QWinEventNotifier: 用于 Windows 事件通知。
- QWinJumpList: 用于 Windows 跳转列表。
- QWinTaskbarButton: 用于 Windows 任务栏按钮。
- QWinTaskbarProgress: 用于 Windows 任务栏进度。
- QWinThumbnailToolBar: 用于 Windows 缩略图工具栏。
- QWinThumbnailToolButton: 用于 Windows 缩略图工具按钮。
Qt 其他类:
- QSharedMemory: 用于共享内存。
- QMacToolBar: 用于 macOS 工具栏。
- QMacToolBarItem: 用于 macOS 工具栏项。
- QTcpServer: 用于 TCP 服务器。
- QSessionManager: 用于会话管理。
3. 总结
本文只是大概梳理QT 的基本类型和常用类, 后续会逐个学习使用。
如果你觉得对你有帮助,欢迎点赞并关注我的公众号:DevWiki,后续会持续学习QT。