侧边栏壁纸
博主头像
DevWiki博主等级

不怕慢,只怕站!

  • 累计撰写 156 篇文章
  • 累计创建 90 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
QT

学习QT系列05 - Qt基本类型和常用类

DevWiki
2023-11-30 / 0 评论 / 1 点赞 / 7 阅读 / 10791 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-03-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本文章是《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 中:

  • QCharQChar 是 Qt 中的字符数据类型,它通常是 2 字节,用于支持 Unicode 字符。
  • QByteArrayQByteArray 是 Qt 中的字节数组类型,用于处理二进制数据。它允许在不考虑字符编码的情况下存储和操作二进制数据。
  • QVariantQVariant 是 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 动画和多媒体类:

  1. QAbstractAnimation: 用于动画抽象基类。
  2. QMovie: 用于电影和动画。
  3. QAnimationGroup: 用于动画组合。
  4. QMediaContent: 用于多媒体内容。
  5. QMediaPlaylist: 用于多媒体播放列表。
  6. QMediaRecorder: 用于多媒体录制。
  7. QCamera: 用于摄像头控制。
  8. QCameraImageCapture: 用于摄像头图像捕获。
  9. QCameraViewfinderSettings: 用于摄像头取景器设置。

Qt 事件处理和调度类:

  1. QAbstractEventDispatcher: 用于事件分发器。
  2. QCoreAppliacation: 用于核心应用程序类。

Qt 模型-视图类:

  1. QAbstractItemDelegate: 用于项委托。
  2. QAbstractItemModel: 用于项模型。

Qt 网络和通信类:

  1. QAbstractNetworkCache: 用于抽象网络缓存。
  2. QNetworkAccessManager: 用于网络访问管理。
  3. QNetworkConfigurationManager: 用于网络配置管理。
  4. QNetworkCookieJar: 用于网络 Cookie 管理。
  5. QNetworkSession: 用于网络会话。

Qt 插件和扩展类:

  1. QDesignerFormEditorInterface: 用于设计器表单编辑接口。
  2. QDesignerFormWindowManagerInterface: 用于设计器表单窗口管理接口。
  3. QQmlEngineExtensionPlugin: 用于 QML 引擎扩展插件。

Qt 图形和渲染类:

  1. QAbstractGraphicsShapeItem: 用于抽象图形形状项。
  2. QGraphicsAnchor: 用于图形锚点。
  3. QGraphicsEffect: 用于图形效果。
  4. QGraphicsItemAnimation: 用于图形项动画。
  5. QGraphicsObject: 用于图形对象。
  6. QGraphicsScene: 用于图形场景。
  7. QGraphicsTransform: 用于图形变换。

Qt 多媒体和音频类:

  1. QAudioDecoder: 用于音频解码器。
  2. QAudioEncoderSettings: 用于音频编码设置。
  3. QMultimedia: 用于多媒体类。

Qt 按钮和操作类:

  1. QButtonGroup: 用于按钮组。
  2. QAction: 用于动作。
  3. QActionGroup: 用于动作组。
  4. QShortcut: 用于快捷键。

Qt 拓展和插件类:

  1. QAxFactory: 用于 ActiveX 工厂。
  2. QAxObject: 用于 ActiveX 对象。
  3. QAxScript: 用于 ActiveX 脚本。
  4. QAxScriptManager: 用于 ActiveX 脚本管理。

Qt 剪贴板和文本编辑类:

  1. QClipboard: 用于剪贴板。
  2. QTextDocument: 用于文本文档。

Qt 数据和模型类:

  1. QCompleter: 用于自动完成。
  2. QDataWidgetMapper: 用于数据部件映射。
  3. QItemSelectionModel: 用于项选择模型。

Qt 事件处理和调度类:

  1. QEventLoop: 用于事件循环。

Qt 插件和扩展类:

  1. QExtensionFactory: 用于扩展工厂。
  2. QExtensionManager: 用于扩展管理。
  3. QPluginLoader: 用于插件加载。
  4. QLibrary: 用于动态链接库加载。

Qt 文件和数据类:

  1. QFileSelector: 用于文件选择器。
  2. QFileSystemWatcher: 用于文件系统监视。
  3. QIODevice: 用于输入/输出设备。
  4. QFile: 用于文件操作。
  5. QDir: 用于目录操作。

Qt 图形和图像类:

  1. QImageIOPlugin: 用于图像 I/O 插件。
  2. QImageReader: 用于图像读取。
  3. QImageWriter: 用于图像写入。

Qt 手势和输入类:

  1. QGesture: 用于手势。

Qt 图形和渲染类:

  1. QScreen: 用于屏幕管理。
  2. QSGTexture: 用于场景图形纹理。

Qt 文档和文本类:

  1. QTextDocument: 用于文本文档。
  2. QTextObject: 用于文本对象。
  3. QAbstractTextDocumentLayout: 用于文本文档布局。

Qt 用户界面和操作类:

  1. QSystemTrayIcon: 用于系统托盘图标。
  2. QWidget: 用于用户界面部件。

Qt 图形渲染和绘制类:

  1. QSGAbstractRenderer: 用于场景图形渲染器。
  2. QSGEngine: 用于场景图形引擎。
  3. QSGTexture: 用于场景图形纹理。
  4. QSGTextureProvider: 用于场景图形纹理提供者。

Qt OpenGL 类:

  1. QOpenGLContext: 用于 OpenGL 上下文。
  2. QOpenGLContextGroup: 用于 OpenGL 上下文组。
  3. QOpenGLDebugLogger: 用于 OpenGL 调试日志。
  4. QOpenGLShader: 用于 OpenGL 着色器。
  5. QOpenGLShaderProgram: 用于 OpenGL 着色器程序。
  6. QOpenGLTimeMonitor: 用于 OpenGL 时间监视。
  7. QOpenGLTimerQuery: 用于 OpenGL 定时器查询。
  8. QOpenGLVertexArrayObject: 用于 OpenGL 顶点数组对象。

Qt 数据存储类:

  1. QSettings: 用于应用程序设置存储。

Qt 并发和多线程类:

  1. QThread: 用于线程管理。
  2. QThreadPool: 用于线程池。

Qt 定时和计时类:

  1. QTimeLine: 用于时间线。
  2. QTimer: 用于定时器。

Qt 国际化和本地化类:

  1. QTranslator: 用于翻译器。

Qt 撤销和重做类:

  1. QUndoGroup: 用于撤销组。
  2. QUndoStack: 用于撤销栈。

Qt 校验和验证类:

  1. QValidator: 用于验证器。

Qt 窗口和视图类:

  1. QWindow: 用于窗口管理。
  2. QWinEventNotifier: 用于 Windows 事件通知。
  3. QWinJumpList: 用于 Windows 跳转列表。
  4. QWinTaskbarButton: 用于 Windows 任务栏按钮。
  5. QWinTaskbarProgress: 用于 Windows 任务栏进度。
  6. QWinThumbnailToolBar: 用于 Windows 缩略图工具栏。
  7. QWinThumbnailToolButton: 用于 Windows 缩略图工具按钮。

Qt 其他类:

  1. QSharedMemory: 用于共享内存。
  2. QMacToolBar: 用于 macOS 工具栏。
  3. QMacToolBarItem: 用于 macOS 工具栏项。
  4. QTcpServer: 用于 TCP 服务器。
  5. QSessionManager: 用于会话管理。

3. 总结

本文只是大概梳理QT 的基本类型和常用类, 后续会逐个学习使用。

如果你觉得对你有帮助,欢迎点赞并关注我的公众号:DevWiki,后续会持续学习QT。

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区