3

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

 9 months ago
source link: https://blog.devwiki.net/2023/11/30/study_qt_05_base_type_and_common_class.html#cl-4
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

发表于2023-11-30 | 更新于 2023-11-30 | QT
字数总计: 7810 | 阅读时长: 5分钟 | 阅读量: 133

DevWiki Blog

20230711192732.png

本文章是《Qt入门到放弃2023版》的学习的第5章节

对比来看,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
基类QObjectObject
集合QList,QMap,QVector,QHash,QSet,QLinkedList,QStack,QQueue,QPair,QMultiMap,QMultiHashList,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,QDataStreamFile,Directory,Path,DirectoryInfo,FileInfo
IOQDataStream,QTextStream,QBufferStream,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: 用于会话管理。

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

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

qrcode_for_gh_bed8d38fa7cb_258.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK