介绍10个比较优秀好用的Qt相关的开源库

embedded/2025/2/8 11:44:00/

记录下比较好用的一些开源

qt_1">1. Qt中的日志库“log4qt

log4qt 是一个基于 Apache Log4j 设计理念的 Qt 日志记录库,它为 Qt 应用程序提供了强大而灵活的日志记录功能。Log4j 是 Java 领域广泛使用的日志框架,log4qt 借鉴了其优秀的设计思想,让 Qt 开发者可以方便地在 C++ 代码中实现类似的日志记录机制;log4qt开源库基本可以满足中小型项目的各种日志需求,特别优点是能很好的嵌入到Qt开发的项目中,自动打印出Qt本身的一些警告或错误,这块其实很有用,往往是一些问题的本源;
可以从 log4qt 的官方 GitHub 仓库(https://github.com/MEONMedical/log4qt)下载最新的源码。解压源码包后,进入源码目录,使用 Qt 的 qmake 和 make 工具进行编译和安装。在项目的 .pro 文件中添加对 log4qt 库的引用。
在应用程序的 main 函数中,需要对 log4qt 进行初始化。以下是一个简单的初始化示例

#include <QCoreApplication>
#include <Log4Qt/Logger>
#include <Log4Qt/BasicConfigurator>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 基本配置,将日志输出到控制台Log4Qt::BasicConfigurator::configure();// 获取根日志记录器Log4Qt::Logger* logger = Log4Qt::Logger::root();// 记录日志logger->debug("Debug message");logger->info("Info message");logger->warn("Warning message");logger->error("Error message");logger->fatal("Fatal message");return a.exec();
}
2. 图表开源库“QCustomPlot”

QCustomPlot是一个基于Qt画图和数据可视化的C++控件。在Qt下的绘图工具有Qwt、QChart和QCustomPlot,在绘制大量数据(10万个点以上)时选择QCustomPlot优势比较明显,可以将XY轴对调,然后形成横向的效果,无论是曲线图还是柱状图,分组图、堆积图等,都支持这个特性。
功能特点:一个用于绘制各种 2D 图表的 Qt 库,支持折线图、柱状图、散点图、饼图等多种图表类型。它具有高度的可定制性,能够自定义图表的外观、坐标轴、标签等。可以方便地添加数据、更新图表,并且支持交互操作,如缩放、平移等。
如下:在 Qt 项目中,使用QCustomPlot可以轻松创建一个简单的折线图

#include "qcustomplot.h"
#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);QCustomPlot *customPlot = new QCustomPlot();// 创建一个折线图customPlot->addGraph();QVector<double> x(101), y(101);for (int i = 0; i < 101; ++i) {x[i] = i / 50.0 - 1;y[i] = x[i] * x[i];}customPlot->graph(0)->setData(x, y);customPlot->rescaleAxes();customPlot->replot();customPlot->show();return a.exec();
}
3. SQLite数据库

功能特点:SQLite 是一个轻量级的嵌入式数据库,它将整个数据库存储在一个单一的文件中,无需单独的服务器进程。Qt 提供了对 SQLite 的原生支持,通过 QSqlDatabase 和 QSqlQuery 等类可以方便地进行数据库操作,如创建表、插入数据、查询数据等。
适用场景:适合开发小型应用程序、嵌入式系统等,对数据库性能要求不是特别高的场景。

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("test.db");if (db.open()) {QSqlQuery query;query.exec("CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, name TEXT)");query.exec("INSERT INTO test (name) VALUES ('John')");query.exec("SELECT * FROM test");while (query.next()) {qDebug() << query.value(0).toInt() << query.value(1).toString();}db.close();}return a.exec();
}
4. QtWebSockets网络库

功能特点:Qt 提供的用于实现 WebSocket 通信的模块,支持客户端和服务器端的开发。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实时数据传输的场景。
适用场景:常用于开发实时聊天应用、实时监控系统、在线游戏等。
以下是一个简单的 WebSocket 客户端示例

#include <QCoreApplication>
#include <QWebSocket>
#include <QDebug>class WebSocketClient : public QObject {Q_OBJECT
public:WebSocketClient(const QUrl &url, QObject *parent = nullptr) : QObject(parent), m_url(url) {connect(&m_webSocket, &QWebSocket::connected, this, &WebSocketClient::onConnected);connect(&m_webSocket, &QWebSocket::disconnected, this, &WebSocketClient::closed);m_webSocket.open(QUrl(m_url));}private slots:void onConnected() {qDebug() << "Connected to server";m_webSocket.sendTextMessage("Hello, server!");}void closed() {qDebug() << "Disconnected from server";}private:QWebSocket m_webSocket;QUrl m_url;
};#include "main.moc"int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);WebSocketClient client(QUrl("ws://localhost:1234"));return a.exec();
}
5. QML Material 库

QML Material 是一个基于 Qt Quick(QML)实现的 UI 组件库,它遵循 Google 的 Material Design 设计语言。Material Design 是一种由 Google 推出的设计规范,强调使用简洁、直观的界面元素和富有层次感的视觉效果,以提供统一且美观的用户体验。QML Material 库将这些设计理念融入到 Qt 应用程序开发中,使得开发者可以轻松创建出具有现代感和时尚感的用户界面。
在 QML 文件中,导入 QML Material 库,使项目可以使用该库提供的组件,这样QML文件中就可以直接使用 QML Material 提供的组件。
以下是一个简单的示例,展示了如何使用 Material.Button 组件

import QtQuick 2.15
import QtQuick.Window 2.15
import Material 1.0Window {visible: truewidth: 640height: 480title: "QML Material Example"Material.Button {text: "Click me"anchors.centerIn: parentonClicked: {console.log("Button clicked!")}}
}
6. QSingleApplication 库

QSingleApplication 是一个用于确保应用程序在系统中只能有一个实例运行的 Qt 库。在很多实际应用场景中,我们不希望同一个应用程序同时打开多个实例,例如某些配置工具、系统监控程序等,多次打开可能会导致资源冲突、数据不一致等问题。QSingleApplication 库通过使用系统级的锁机制(如共享内存、命名管道等)来检测应用程序是否已经有实例在运行,如果有则将新启动的实例的操作(如命令行参数传递、激活已有实例窗口等)转发给已有实例,从而保证应用程序的单实例运行。
QSingleApplication 使用简单,包含了头文件后,在 main 函数中,使用 QSingleApplication 替代 QApplication 来创建应用程序实例

#include <QDebug>
#include "qsingleapplication.h"int main(int argc, char *argv[])
{QSingleApplication app(argc, argv, true);// 检查是否已经有实例在运行if (app.isRunning()) {// 如果已有实例运行,将新实例的消息(如命令行参数)发送给已有实例app.sendMessage("New instance started with args: " + QStringList(app.arguments()).join(" "));return 0; // 退出新实例}// 这里开始编写你的应用程序主逻辑// 例如创建主窗口等// ...return app.exec();
}
7. QtAdvancedStylesheets工具

QtAdvancedStylesheets 是一个用于增强 Qt 应用程序样式表功能的工具。在 Qt 开发中,样式表(QSS)是一种强大的机制,用于自定义应用程序的外观,而 QtAdvancedStylesheets 在此基础上进行了扩展,提供了更多高级的样式特性和功能,帮助开发者更轻松地创建出美观、独特且富有交互性的用户界面。
丰富的样式特性:支持更多复杂的样式效果,如渐变、阴影、圆角等,能够让界面元素呈现出更加立体和现代的外观。
动态样式更新:允许在运行时动态修改样式,实现一些动画效果或根据用户操作改变界面外观,增强用户交互体验。
自定义选择器:提供了自定义选择器的功能,使得样式规则的应用更加灵活,可以根据特定的条件或属性来选择界面元素进行样式设置。
跨平台兼容性:基于 Qt 框架,继承了 Qt 的跨平台特性,可以在 Windows、Linux、macOS 等多种操作系统上使用。

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include "QtAdvancedStylesheets.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建一个主窗口和一个按钮QWidget window;QPushButton button("Click me", &window);button.move(50, 50);// 加载样式表文件QString styleSheet = QtAdvancedStylesheets::parseStyleSheetFromFile("styles.qss");// 应用样式表到应用程序app.setStyleSheet(styleSheet);window.show();return app.exec();
}

QtAdvancedStylesheets::parseStyleSheetFromFile(“styles.qss”) 函数用于从指定的文件中解析样式表内容。这里的 “styles.qss” 是你自定义的样式表文件,你可以在其中编写 QtAdvancedStylesheets 支持的样式规则。
他还有个巨牛的接口QtAdvancedStylesheets::mergeStyleSheets 函数,用于合并当前样式表和新的样式表,然后将合并后的样式表应用到应用程序,实现样式的动态更新

8. QtWebApp库

QtWebApp 是一个基于 Qt 框架开发的轻量级 Web 应用程序框架,用于快速构建 Web 服务器和 Web 应用。它提供了简单易用的 API,使得开发者能够方便地处理 HTTP 请求、响应,管理会话,以及实现动态网页等功能。该库适用于开发各种类型的 Web 应用,如 Web 服务接口、小型 Web 网站等。

可以从 QtWebApp 的开源仓库(GitHub)下载其源码,将下载的源码文件添加到你的 Qt 项目中。一般需要包含头文件和源文件,并在项目配置文件(如 .pro 文件)中添加相应的源文件路径。
例如使用 QtWebApp 搭建一个简单的 Web 服务器:

#include <QtCore/QCoreApplication>
#include "httplistener.h"
#include "requestmapper.h"// 配置文件
QSettings* settings = new QSettings("config.ini", QSettings::IniFormat, 0);// 主函数
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建 HTTP 监听器new HttpListener(settings, new RequestMapper(&a), &a);return a.exec();
}
//请求映射器 RequestMapper
#include "requestmapper.h"
#include "staticfilecontroller.h"
#include "templatecontroller.h"extern QSettings* settings;// 静态文件控制器
StaticFileController* staticFileController = new StaticFileController(settings, &requestMapper);// 模板控制器
TemplateController* templateController = new TemplateController(&requestMapper);RequestMapper::RequestMapper(QObject* parent) : HttpRequestHandler(parent) {// 初始化代码
}void RequestMapper::service(HttpRequest& request, HttpResponse& response) {QByteArray path = request.getPath();// 处理静态文件请求if (path.startsWith("/static")) {staticFileController->service(request, response);} // 处理模板请求else if (path.startsWith("/template")) {templateController->service(request, response);} // 其他请求else {response.setStatus(404, "Not found");response.write("The URL is wrong, no such document.", true);}
}
//模板控制器
#include "templatecontroller.h"
#include "template.h"TemplateController::TemplateController(QObject* parent): HttpRequestHandler(parent) {// 初始化代码
}void TemplateController::service(HttpRequest& request, HttpResponse& response) {// 加载模板文件Template t=templateCache->getTemplate("index",request.getHeader("Accept-Language"));// 设置模板变量t.setVariable("message", "Hello, World!");// 生成 HTML 内容QByteArray html = t.toUtf8();// 设置响应头response.setHeader("Content-Type", "text/html; charset=UTF-8");// 发送响应内容response.write(html, true);
}

再加一个ini配置文件

[listener]
port=8080
minThreads=1
maxThreads=10
cleanupInterval=1000
readTimeout=60000
maxRequestSize=16000
maxMultiPartSize=1000000
9. Qwt库

Qwt库(Qt Widgets for Technical Applications)是一个基于 Qt 框架开发的开源 C++ 类库,专门用于开发技术应用程序中的图表和绘图功能。它提供了一系列丰富的组件和工具,能够帮助开发者快速、高效地创建各种专业级的 2D 图表和绘图界面,广泛应用于科学研究、工程计算、数据监测等领域。
丰富的图表类型:支持多种常见的图表类型,如折线图、柱状图、饼图、散点图、极坐标图等,满足不同场景下的数据可视化需求。
高度可定制性:Qwt 中的每个组件都具有高度的可定制性,开发者可以对图表的外观(如颜色、线条样式、字体等)、坐标轴、刻度、标签等进行细致的设置,以实现个性化的视觉效果。
交互功能:提供了一些交互功能,如鼠标缩放、平移、数据点提示等,增强了用户与图表的交互体验,方便用户对数据进行深入分析。
跨平台兼容性:由于基于 Qt 框架,Qwt 继承了 Qt 的跨平台特性,可以在 Windows、Linux、macOS 等多种操作系统上运行。
可以从 Qwt 的官方网站(http://qwt.sourceforge.net/)下载最新的源码包,解压源码包后,进入源码目录,使用 Qt 的 qmake 和 make 工具进行编译和安装。在需要引入的项目的 .pro 文件中添加对 Qwt 库的引用。
以下简单展示如何使用 Qwt 库创建一个折线图

#include <QApplication>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_legend.h>
#include <qwt_point_data.h>
#include <vector>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 创建一个 QwtPlot 对象QwtPlot plot;plot.setWindowTitle("Simple Qwt Plot");plot.insertLegend(new QwtLegend());// 准备数据std::vector<double> x = {1, 2, 3, 4, 5};std::vector<double> y = {2, 4, 6, 8, 10};QwtPointArrayData data(x.data(), y.data(), static_cast<int>(x.size()));// 创建一个 QwtPlotCurve 对象QwtPlotCurve *curve = new QwtPlotCurve("Line Curve");curve->setData(data);curve->setPen(Qt::blue, 2);  // 设置曲线的颜色和宽度curve->attach(&plot);  // 将曲线附加到 QwtPlot 上// 显示图表plot.show();return a.exec();
}
10.精美控件库qskinny库

qskinny 是一个轻量级、跨平台的 Qt Quick 控件库,它专为创建具有高性能和自定义外观的用户界面而设计。它基于 Qt Quick 技术,提供了一系列丰富的控件,可用于开发各种类型的应用程序,包括嵌入式系统、桌面应用和移动应用等。
qskinny 的设计注重资源的高效利用,它的代码量相对较小,运行时占用的内存和 CPU 资源也较少,非常适合在资源受限的设备上运行。
可以从 qskinny 的官方 GitHub 仓库(https://github.com/Hermann-SW/qskinny)下载最新的源码,解压源码包后,进入源码目录,使用 Qt 的 qmake 和 make 工具进行编译和安装。然后在你要引入的项目的 .pro 文件中添加对 qskinny 库的引用。
简单展示如何在 QML 中使用 qskinny 控件创建一个包含按钮和文本框的界面:

import QtQuick 2.15
import Skinny 1.0ApplicationWindow {visible: truewidth: 640height: 480title: "qskinny Example"SkinnyItem {anchors.fill: parent// 创建一个按钮SkinnyPushButton {text: "Click me"anchors.centerIn: parentonClicked: {textField.text = "Button clicked!"}}// 创建一个文本框SkinnyLineEdit {id: textFieldanchors.top: parent.topanchors.left: parent.leftanchors.margins: 20width: 200}}
}

以上10个Qt相关的开关库,都是比较优秀的开源库。可以与 Qt 结合使用,以扩展其功能。


http://www.ppmy.cn/embedded/160525.html

相关文章

基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境

一、创建Vite项目 使用Vite初始化一个VueTypeScript项目&#xff1a; npm create vitelatest my-babylon-app -- --template vue-ts cd my-babylon-app npm create vitelatest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue TypeScript 项目。…

前端控制器模式

前端控制器模式 引言 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是一种设计模式&#xff0c;旨在简化应用程序的请求处理过程。它将应用程序的所有请求统一由一个控制器处理&#xff0c;从而减少请求分发和响应的复杂性。本文将详细介绍前端控制器模式…

项目顺利交付,几个关键阶段

年前离放假还有10天的时候&#xff0c;来了一个应急项目&#xff0c; 需要在放假前一天完成一个演示版本的项目&#xff0c;过年期间给甲方领导看。 本想的最后几天摸摸鱼&#xff0c;这么一来&#xff0c;非但摸鱼不了&#xff0c;还得加班。 还在虽然累&#xff0c;但也是…

python编程-内置函数bin(),bool(),abs() ,all(),any(),ascii(),max(),min() 详解

1、bin()函数用于将整数转换为其二进制字符串表示。并返回一个以0b开头的字符串&#xff0c;表示该整数的二进制形式。 # 十进制数转换为二进制字符串 decimal_number 42 binary_string bin(decimal_number) print(f"Decimal {decimal_number} is {binary_string} in b…

开箱即用的.NET MAUI组件库 V-Control 发布了!

之前写过挺多的MAUI Sample&#xff0c;其中有很多代码可以打包成组件&#xff0c;当组件完善到一定程度&#xff0c;我会把控件封装起来放到控件库中。 今天&#xff0c;在这个仓库建立一年零八个月后&#xff0c;我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET …

保姆级教程Docker部署Zookeeper官方镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、运行Zookeeper容器 4、Compose运行Zookeeper容器 5、查看Zookeeper运行状态 6、验证Zookeeper是否正常运行 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化管理…

修改SSH登录密码,只需要登录SSH,之后输入命令即可,这里登录使用的软件为 MobaXterm1

在登入终端之后输入命令 passwd {用户名} 即可进行修改。需要注意的是&#xff0c;输入的密码不会有星号代替&#xff0c;也不会出现明文。 如果想要修改SSH的登录端口&#xff0c;比如修改为1433&#xff0c;则只需要执行以下命令即可&#xff1a; /usr/sbin/sshd -p 1433…

【机器学习案列】基于XGBoost的睡眠时间预测

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…