第6章 浅尝Qt附加模块(不同版本有区别)

Qt for Python 从入门到部署:PySide6 环境搭建、打包与多线程实战 图形用户界面(GUI)开发是软件工程中的重要领域,其核心在于创建直观、响应式的用户交互层。Qt 作为成熟的跨平台 C++ 框架,通过信号与槽机制实现了高效的事件驱动模型,为构建复杂桌面应用提供了坚实基础。其技术价值在于将高性能的本地渲染能力与丰富的 UI 组件相结合,显著提升了应用的稳定性和用户体验。在应用场景上,Qt 广泛用于工业控制、嵌入式 HMI、多媒体工具及科学计算软件。通过 PySide6 这一官方绑定库,开发者得以利用 Python 的简洁语法和丰富生态来调用 Qt 的强大功能,实现快速原型开发 阅读详情

第6章 浅尝Qt附加模块(不同版本有区别)

Qt 框架除了核心模块外,还提供了丰富的附加模块,涵盖数据库访问、图表绘制、多媒体处理等功能。本章将对这些附加模块进行介绍,并通过示例展示其基本用法。


6.1 Qt SQL

Qt SQL 模块提供了对各种数据库的支持,使开发者能够方便地在应用程序中集成数据库功能。

6.1.1 数据库连接与驱动支持

Qt 支持多种数据库驱动,包括但不限于:

  • QMYSQL:MySQL 驱动
  • QPSQL:PostgreSQL 驱动
  • QSQLITE:SQLite 驱动

要连接数据库,首先需要加载相应的驱动并建立连接:

#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("testdb");
db.setUserName("root");
db.setPassword("password");
if (!db.open()) {
    qDebug() << "Database error occurred:" << db.lastError().text();
}

在上述代码中,我们使用 QSqlDatabase 类添加并配置了一个 MySQL 数据库连接。请确保在使用前已安装相应的数据库驱动。

6.1.2 使用QSqlQuery执行SQL语句

QSqlQuery 类用于执行 SQL 语句,包括查询和修改操作。

执行查询操作:

#include <QSqlQuery>
#include <QSqlRecord>

QSqlQuery query("SELECT id, name FROM employees");
while (query.next()) {
    int id = query.value(0).toInt();
    QString name = query.value(1).toString();
    qDebug() << id << name;
}

执行插入操作:

QSqlQuery query;
query.prepare("INSERT INTO employees (name, age) VALUES (:name, :age)");
query.bindValue(":name", "John Doe");
query.bindValue(":age", 30);
if (!query.exec()) {
    qDebug() << "Insert error:" << query.lastError().text();
}

在上述示例中,QSqlQuery 用于执行 SQL 语句,并通过 bindValue 方法绑定参数,防止 SQL 注入。

6.1.3 QSqlTableModel与界面绑定

QSqlTableModel 提供了一个高层接口,用于从单个数据库表中读取和写入记录。它建立在较低级别的 QSqlQuery 之上,可用于为视图类(如 QTableView)提供数据。

示例:

#include <QSqlTableModel>
#include <QTableView>

QSqlTableModel *model = new QSqlTableModel;
model->setTable("employees");
model->select();

QTableView *view = new QTableView;
view->setModel(model);
view->show();

在上述代码中,我们创建了一个 QSqlTableModel 实例,设置其关联的数据库表为 “employees”,然后将其绑定到 QTableView,以显示数据。


6.2 Qt Charts

Qt Charts 模块提供了一组易于使用的图表组件,可用于创建各种图表,如折线图、柱状图、饼图等。

6.2.1 Charts模块介绍

Qt Charts 模块基于 Qt 的图形视图框架,提供了丰富的图表类型,包括:

  • 折线图(Line Chart)
  • 样条曲线图(Spline Chart)
  • 面积图(Area Chart)
  • 散点图(Scatter Chart)
  • 柱状图(Bar Chart)
  • 饼图(Pie Chart)
  • 箱线图(Box-and-Whiskers Chart)
  • K线图(Candlestick Chart)
  • 极坐标图(Polar Chart)

这些图表类型由 QAbstractSeries 派生类表示,可通过将系列类的实例添加到 QChart 实例来创建图表。

6.2.2 使用折线图、柱状图、饼图等组件

折线图示例:

#include <QtCharts>

QLineSeries *series = new QLineSeries();
series->append(0, 6);
series->append(2, 4);
series->append(3, 8);
series->append(7, 4);
series->append(10, 5);

QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("Simple Line Chart");
chart->createDefaultAxes();

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->show();

柱状图示例:

#include <QtCharts>

QBarSet *set0 = new QBarSet("Jane");
QBarSet *set1 = new QBarSet("John");

*set0 << 1 << 2 << 3 << 4 << 5 << 6;
*set1 << 5 << 0 << 0 << 4 << 0 << 7;

QBarSeries *series = new QBarSeries();
series->append(set0);
series->append(set1);

QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("Simple Bar Chart");
chart->setAnimationOptions(QChart::SeriesAnimations);

QStringList categories;
categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);

QValueAxis *axisY = new QValueAxis();
axisY->setRange(0, 10);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->show();

饼图示例:

#include <QtCharts>

QPieSeries *series = new QPieSeries();
series->append("Jane", 1);
series->append("John", 2);
series->append("Joe", 3);
series->append("Anna", 4);
series->append("Axel", 5);

QPieSlice *slice = series->slices().at(1);
slice->setExploded(true);
slice->setLabelVisible(true);
slice->set
::contentReference[oaicite:0]{index=0}

6.3 Qt Multimedia

Qt Multimedia 模块为应用程序提供了处理多媒体内容的能力,包括音频、视频的播放与录制,以及摄像头的访问等功能。该模块提供了一套丰富的 QML 类型和 C++ 类,方便开发者在跨平台应用中集成多媒体功能。 ([Qt 文档][1])

主要特性:

  • 音频功能: 支持音频的播放、录制和处理,允许开发者访问系统的麦克风和扬声器设备。

  • 视频功能: 支持视频的播放和录制,能够处理来自文件、流媒体或摄像头的视频内容。([packages.fedoraproject.org][2])

  • 摄像头访问: 提供对系统摄像头的访问接口,支持拍照和视频录制功能。

示例代码:

以下是一个使用 QMediaPlayer 播放音频文件的简单示例:([Stack Overflow][3])

#include <QMediaPlayer>
#include <QUrl>

// 创建媒体播放器对象
QMediaPlayer *player = new QMediaPlayer;

// 设置要播放的音频文件
player->setSource(QUrl::fromLocalFile("/path/to/audiofile.mp3"));

// 开始播放
player->play();

注意事项:

在使用 Qt Multimedia 模块时,需要在项目的 CMakeLists.txt 文件中添加对该模块的依赖:

find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(your_target PRIVATE Qt6::Multimedia)

此外,确保在部署应用程序时,包含必要的多媒体插件和支持库,以保证多媒体功能的正常运行。

6.4 其他模块

Qt 提供了许多附加模块,扩展了应用程序的功能。以下是其中一些常用模块的介绍:

6.4.1 Qt WebEngine 与网页嵌入

Qt WebEngine 模块基于 Chromium 项目,允许在 Qt 应用程序中嵌入和显示 web 内容。它提供了类似于现代浏览器的功能,包括 HTML、CSS 和 JavaScript 的支持。

主要特性:

  • 网页渲染: 能够在应用程序中嵌入完整功能的网页浏览器。

  • 与 Qt 的集成: 支持与其他 Qt 模块(如 Qt Widgets 和 Qt Quick)的无缝集成。

  • Chromium 内核: 利用 Chromium 的强大功能,提供高性能和安全的网页浏览体验。

示例代码:

以下是一个使用 QWebEngineView 加载网页的示例:

#include <QWebEngineView>

// 创建 QWebEngineView 对象
QWebEngineView *view = new QWebEngineView;

// 加载指定的 URL
view->setUrl(QUrl("https://www.qt.io"));

// 显示窗口
view->show();

注意事项:

由于 Qt WebEngine 基于 Chromium,因此模块的体积较大,应用程序的安装包可能会因此增大。此外,某些平台可能不支持该模块,开发者需要根据目标平台进行评估。([Qt 文档][4])

6.4.2 Qt Bluetooth 与设备通信

Qt Bluetooth 模块提供了与蓝牙设备通信的功能,支持经典蓝牙和低功耗蓝牙(BLE)。该模块允许应用程序搜索、连接和与蓝牙设备进行数据交换。

主要特性:

  • 设备发现: 搜索附近的蓝牙设备,并获取设备信息。

  • 服务发现: 查询已连接设备提供的服务和特征。

  • 数据传输: 与蓝牙设备进行数据读写操作。

示例代码:

以下是一个使用 QBluetoothDeviceDiscoveryAgent 搜索附近蓝牙设备的示例:

#include <QBluetoothDeviceDiscoveryAgent>
#include <QBluetoothDeviceInfo>

// 创建设备发现代理
QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent;

// 连接信号槽,处理发现的设备
QObject::connect(discoveryAgent, &QBluetoothDeviceDiscoveryAgent::deviceDiscovered,
    [](const QBluetoothDeviceInfo &device) {
        qDebug() << "发现设备:" << device.name() << device.address().toString();
    });

// 开始搜索设备
discoveryAgent->start();

注意事项:

在使用 Qt Bluetooth 模块时,需要在项目的 CMakeLists.txt 文件中添加对该模块的依赖:

find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(your_target PRIVATE Qt6::Bluetooth)

此外,确保目标设备和操作系统支持蓝牙功能,并在必要时请求用户授权。

6.4.3 Qt Location 与地图服务

Qt Location 模块提供了地图显示、位置定位和导航等功能,支持多种流行的地图服务提供商,如 OpenStreetMap。 ([Qt 文档][5])

主要特性:

  • 地图显示: 在应用程序中嵌入和显示交互式地图。

  • 位置定位: 获取设备的地理位置,并在地图上显示。

  • 路线规划: 计算并显示从起点到终点的导航路线。

示例代码:

以下是一个在 QML 中使用 Map 显示地图的示例:

import QtQuick
import QtPositioning
import QtLocation

Rectangle {
    width: 800
::contentReference[oaicite:136]{index=136}
 
Qt基础之三十一:Qt网络编程(TCP&UDP) Qt网络模块(Network)提供了编写TCP/IP客户端和服务器的类。该模块不仅提供了低级(low-level)类,如QTcpSocket、QTcpServer和QUdpSocket,还提供了高级(hight-level)类,如QNetworkRequest、QNetworkReply和QNetworkAccessManager。 阅读详情

相关推荐

【pyside6 拓展】QtNetwork 模块介绍

🚀QtNetwork 模块用于发送 HTTP 请求。QTcpSocket用于实现 TCP 客户端通信。QUdpSocket用于处理 UDP 数据包。希望这篇简单介绍能帮助你入门QtNetwork模块!🎉。

m0_62599305的博客 683

QT的network的使用

下面我们用另外一个例子来简单的演示😊如何使用QT的network模块做一个简单的服务端和客户端的开发。用于实现一个简单的聊天程序。这个代码的目的是使用QT的network模块做一个简单的服务端和客户端的开发,实现一个简单的聊天程序。然后再包含相关的头文件,比如:#include //包含头文件。只需要配置这个主机的IP和端口号,由客户端发送链接请求。首先要在pro文件里面包含下面的network,不然会报错。一个简单的双向的网络连接和信息发送。

Helloorld_1的博客 2387

Qt的network模块实现TCP客户端和服务端

TCP协议即英文的简写,transform control protocol 传输控制协议单词的首字母大写拼接而成。TCP协议是传输层协议,具有客户端和服务端,是面向连接(三次握手和四次挥手过程),基于IP协议的可变大小的滑动窗口协议。不支持广播,数据传输失败可以重传,且具有排序检错功能。TCP协议栈应用场景广泛,因其特点,常用于文件传输,保证接收到的文件是完整的和正确的。除此之外还用于邮件发送和接受,确保邮件正确发送正确接受。

qq_55610255的博客 3245

Qt的network模块实现域名找IP

基于Qt Creator应用软件编写的查找IPv4和IPv6的应用层软件Qt 是一个跨平台的 C++图形用户界面应用程序。分为商业版和免费版(我是这么理解的,没有任何依据)Qt各个版本的软件下载链接:使用Qt的好处有很多,在我这儿就是极大地极高开发效率,最明显的就是大大的加快了开发一款app所需要的时间。

qq_55610255的博客 1181

qt使用network模块的http客户端与服务器的demo

github搬运的核心代码,本人进行了简单测试与使用,亲测可以用,封装的挺好的。服务器和客户端的好多接口都有,还有代理的设置。

Unity3D 集成 SQLite 数据库实战:从零搭建到数据可视化

本文详细介绍了在Unity3D项目中集成SQLite数据库的完整实战流程。从SQLite的轻量、稳定、易用特性讲起,逐步指导开发者完成环境配置、驱动集成、C#脚本编写(涵盖连接、建表、增删改查),并进阶演示了数据模型封装与在Unity UI中实现数据可视化的方法。最后提供了多线程访问、路径差异、性能优化等关键避坑指南,帮助开发者构建可靠高效的本地数据管理方案。

weixin_29291069的博客 92

Qt扫盲-网络编程概述

Qt Network模块提供了允许我们编写TCP/IP客户端和服务器的类。它提供了低级类来完成基础的数据传输,如QTcpSocket、QTcpServer和QUdpSocket,Qt也提供了高级类,主要其实就是一个通用应用层协议的工具类,如QNetworkRequest、QNetworkReply和QNetworkAccessManager,这些类是使用公共协议执行网络操作。

洪源兄 4568

腾讯混元3D世界模型2.0实战:从AI生成到Unity/UE引擎集成全指南

生成式AI正在重塑3D内容创作流程,其核心原理是通过大语言模型理解自然语言描述,并驱动多阶段生成流水线自动创建3D资产与场景。这项技术为游戏开发、虚拟仿真和数字孪生领域带来了革命性的效率提升,能够将传统需要数周的美术协作流程压缩至几分钟。在实际应用中,开发者需要掌握本地环境部署、模型推理优化以及生成资产与主流游戏引擎的集成工作流。本文以腾讯开源的混元3D世界模型为例,详细解析如何将AI生成的场景通过插件高效导入Unity和Unreal Engine,并针对光照烘焙、材质调整、性能优化等工程实践问题提供解决方

cnracht8153的博客 1395

目录 《Qt精通之路》

1.3 第一个Qt程序:Hello World。2.5 高级组件:图形视图与自定义绘制。6.3 HTTP通信与REST API。8.5 从Qt 5迁移到Qt 6的实践。2.2 输入组件:按钮、文本框、滑块。2.3 数据显示组件:表格、树状视图。6.5 WebSocket与实时通信。2.4 容器组件:布局管理与容器类。7.1 案例一:简单的文本编辑器。7.5 Qt实践总结与优化建议。7.2 案例二:网络聊天应用。4.5 图像处理与格式支持。5.5 本地化与国际化支持。1.1 Qt的起源与特点。

weison_x的博客 459

TwinCAT3新手必看:5分钟搞定EtherCAT从站PDO动态配置(附电流变量添加技巧)

本文为TwinCAT3新手提供了EtherCAT从站PDO动态配置的快速入门指南。文章详细解析了Process Data Object(PDO)在实时数据交换中的核心作用,并分步演示了在TwinCAT3工程中扫描从站、动态添加与映射PDO(包括接收PDO和发送PDO)的完整操作流程。重点分享了如何灵活添加并监控如电机实际电流等关键工艺变量的高级技巧,并针对不同品牌驱动器的兼容性问题提供了实用的调试心法和解决方案,帮助工程师快速上手并优化工业自动化系统。

xgboost6farmer的博客 454

【通信原理 入坑之路】—— 详解IQ调制以及星座图原理

文章目录一. IQ调制与解调的原理与过程二.PSK(相移键控)和IQ调制的关系:2.1 用IQ调制实现QPSK调制 一. IQ调制与解调的原理与过程 IQ调制的定义是:“IQ调制就是数据分为两路,分别进行载波调制,两路载波相互正交。I是in-phase(同相), q是 quadrature(正交)” 我们通过下面的示意图介绍IQ调制的过程: 首先,信号分成两路:I路和Q路(为了方便理解我们把这两...

凝望,划过星空的博客 11万+

浅尝CloudCompare二次开发

简单尝试CloudCompare的二次开发。

weixin_44701802的博客 2204

ADS1220 STM32硬件SPI驱动程序

前一段时间温故了下标准库,使用的是F1系列芯片,测试程序。

随风飘零翼的博客 5771

别再只用QPushButton了!QCommandLinkButton的5个高级用法与避坑指南

本文深入探讨了Qt框架中QCommandLinkButton控件的5个高级用法与实战避坑指南。通过对比QPushButton,详细解析了其双文本结构的核心价值、动态内容更新、深度样式表定制、子类化自定义绘制以及在复杂布局中的关键作用,帮助开发者提升桌面应用的专业交互体验。

redis7keeper的博客 570

亚马逊跨境电商选品数据分析:Python爬虫实战指南

本文将带领大家构建一套完整的亚马逊选品数据采集与分析系统,使用最新的Python技术栈,从零开始爬取亚马逊商品数据,并进行深度分析。

2201_76125261的博客 299

【EB_Tresos专题】-06-配置一个UDS诊断DID

<--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ...

「汽车电子助手」的博客 4087

2024年C C++最全编写可移植C C++程序的要点(2),面试大厂应该注意哪些问题

然而,对于一些比较特殊的应用,如图形组件本身,就拿GTK+来说吧,基于X Window的功能和基于Win32的功能,两者差巨大,除了窗口、事件等基本概念外,几乎没有什么相同的,如果不事先了解各个平台的特性,在设计时就精心考虑的话,抽象出来的抽口在另外一个平台几乎无法实现。**这一点是建立在分层设计之上的,大多数底层函数,像线程、同步机制和IPC机制等等,不同平台提供的函数,几乎是一一对应的,封装这些函数很简单,实现Adapter的工作几乎只是体力活。**1、分层设计,隔离平台相关的代码。

2401_84976219的博客 983

AI快速变现之路,AI视频创作

初期投入$3000(工具订阅+样片制作),重点攻克跨境电商和本地生活服务市场。关注2025年AIGC视频工具的API降价趋势(如Pika企业版折扣可达50%),建议与云服务商签订长期合作协议。

qq_29896351的博客 1982

Qt:Qt网络

和多线程类似,Qt为了支持跨平台,对网络编程的API也进行了重新封装。咱们接下来的重点介绍Qt的网络相关的API的使用。实际Qt开发中进行网络编程,也不⼀定使用Qt封装的网络API,也有⼀定可能使用的是系统原生API或者其他第三方框架的API。在进行网络编程之前,需要在项目中的 .pro 文件中添加 network 模块有时添加之后要手动编译一下项目,使 Qt Creator 能够加载对应模块的头文件。

2302_79054145的博客 983

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用 Qt Network 模块进行网络编程

UDP(用户数据报协议)是一种轻量级的、不可靠的、面向数据报的、无连接的协议。它是一种可靠的、面向流的、面向连接的传输协议。简而言之,数据报是一个大小有限的数据包(通常小于 512 字节),除了正在传输的数据之外,还包含数据报发送方和接收方的 IP 地址和端口。对象中,这些对象可以根据关键条件选择代理,例如代理的目的(TCP、UDP、TCP 服务器、URL 请求)、本地端口、远程主机和端口以及中的协议使用(HTTP、FTP 等)。实际的查找是在一个单独的线程中完成的,利用操作系统自己的方法来执行名称查找。.

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 1978

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Qt网络编程——QtNetwork模块

QtNetwork模块提供了编写TCP/IP客户端和服务器的类。例如QFtp类实现了具体的应用层协议,而QTcpSocket、QTcpServer和QUdpSocket这三个类则实现了底层网络概念。 QNetworkRequest、QNetworkReply和QNetworkAccessManager这三个类使用通常协议执行网络操作,这是顶层类。Qt还提供了QNetworkConfiguratio

maxiee的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Qt 之高级网络操作

简述 Qt NetWork 模块中提供了一些网络类,例如QNetworkRequest、QNetworkReplay和QNetworkAccessManager使用常见的协议进行网络操作 调试的过程中可以使用Fiddler,便于我们调试。Fidder是一个HTTP协议代理工具,当然也可以使用Web/Http调试工具 HTTP 消息结构 Request 请求行: Request消息中的第一行,由请求方式、请求URL、HTTP协议及版本三部分组成。 请求头:其中Content-Type制定了客户端发送的内容格

sinat_14819779的博客 1007

QT 网络编程(一)

Qt 网络编程相关

m0_73241073的博客 1740

qt udu 需要添加的模块

qt udu 需要添加的模块

xie__jin__cheng的博客 469

深入浅出 Qt Network 网络编程模块:Qt C++ 网络通讯从协议到应用全解析

深入浅出 Qt Network 网络编程模块:Qt C++ 网络通讯从协议到应用全解析

qianniulaoren的博客 2139
上一篇: 第5章 浅尝Qt其他核心模块
下一篇: 第七章:Qt 实践
weisonx
博客等级 码龄9年 155粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weisonx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值