Qt常用轮子合集(带使用Demo)

公用轮子/API

image-20210521164854299

主要存放全局变量,配置变量,一些公用方法代码 还有自定义日志,以及重定向输出Qt编译器信息到本地文件。

日志库

建以使用mvlog库就ok,跨平台通用库,简单的单例模式,同时可以重定向输出Qt编译器信息(文件名称,函数名称,代码行数等一些信息)。日志有 Debug、Warning、Critiacal、Fatal、Info等。

/* 如何需要定向输出编译器日志,下面段代码放到mian函数中去
  * @brief 定向输出编译器调试信息
  * 请在main函数中加入下面判断条件是否定向输出调试信息
  *    qInfo: 基本信息
  *    qDebug:调试信息
  *    qWarning:警告信息
  *    qCritical:严重错误
  *    qFatal:致命错误
  *     if (App::isOutPutDebuginfo) {
  *     void MessageOutPut(QtMsgType type, const QMessageLogContext &context, const QString &msg);
  *      qInstallMessageHandler(MessageOutPut);
  *   }
  * @param
  *
  * @return
  * 调试信息会输出在程序启动路径下,并且重启程序会自动删除
  *
*/
//文件大小 1mb
const int FILE_SIZE = 1024000;

void MessageOutPut(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    static QMutex mutex;
    mutex.lock();
    QString text;
    QString filename;
    switch(type)
    {
    case QtDebugMsg:
        text = QString("Debug:");
        filename = "_debug.log";
        break;

    case QtWarningMsg:
        text = QString("Warning:");
        filename = "_warning.log";
        break;

    case QtCriticalMsg:
        text = QString("Critical:");
        filename = "_critical.log";
        break;

    case QtFatalMsg:
        text = QString("Fatal:");
        filename = "_fatal.log";
        break;

    case QtInfoMsg:
        text = QString("Info:");
        filename = "_info.log";
        break;

    default:
        break;
    }
    //日志写到文件
    QString current_dt = QDateTime::currentDateTime().toString("[yyyy-MM-dd-HH-mm-ss-zzz] ");
    //QString context_info = QString("File:(%1) Line:(%2) Function:(%3)").arg(QString(context.file)).arg(context.line).arg(context.function);
    QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
    QString message = QString("%1%2  %3   %4").arg(current_dt).arg(text).arg(context_info).arg(msg);
    //QString LOG_FILE  =  "C:/"+filename;
    QString LOG_FILE  =  App::appPath+"/"+App::appName+filename;

    QFile debfile(LOG_FILE);
    debfile.open(QIODevice::WriteOnly | QIODevice::Append);
    //日志文件大小大于1m就清空
    if (debfile.size() > FILE_SIZE) {
        debfile.close();
        debfile.open(QIODevice::WriteOnly | QIODevice::Truncate);
    }
    QTextStream text_stream(&debfile);
    text_stream << message << "\r\n";
    text_stream.flush();   //刷新缓冲区
    debfile.flush();
    //不建议频繁打开关闭日志文件,IO性能瓶颈很大
    debfile.close();
    mutex.unlock();
}

log4qt是开源的日志框架系统。使用起来比较麻烦。

GPIO

简单的控制GPIO口的高/低电平,接口为静态函数,调用非常简单 便捷。
在这里插入图片描述

串口库

可以使用第三方串口库

image-20210531194749708

测试用例:见Example/comtool

网络库

TCP/UDP

/**
*@projectName MyNetwork
*@brief  version V1.0.0.1
* 1: 四种模式,tcp客户端、tcp服务器、udp客户端、udp服务器
* 2:支持多个客户端连接并发
* 3:支持服务端单播,多播,指定断开,全部断开
* 4: 采用单线程
* 2020-06-03 version V1.0.0.2 新增:
* 5: TCP传输 json对象 byte数组  自定义结构体
*
* 2020-11-20 version V1.0.0.3 新增:
* 6: UDP传输字节数组
* 7:TCP在发送数据时使用flush及时刷新
*
*author zlozl
*date 2020-06-03
*/

/* [Commit]
 * 1.新增UDP广播
 *
 * Version:   V1.0.0.2
 * Date:      2021-05-08
 * Author:    zlozl
 */

image-20210601090548788

测试用例:见Example/MyNetwork(V1.0.0.4)

WebSocket

基于Qt QWebsocket封装的简单的Server和Client。

image-20210601090619518

测试用例:见Example/websocket_demo

Http/Https

Qt的官方HttpServer库,好像不是很好用,所以使用第三方库,JQHttpServer ,目前我个人所用的http库都是这个。

githubhttps://github.com/188080501/JQHttpServer

image-20210601092011318

demo:

myHttpClient_v1.2:使用客户端先服务端请求下载文件,并显示下载文件的进度。
myHttpClient:JQHttpServer的客户端使用示例
myHttpServer:JQHttpServer的服务端使用示例

在这里插入图片描述

多线程

Qt几种实现多线程方式,如何优雅的实现线程的启动、暂停、复位、退出。这个文件下面有各种姿势的实现多线程的例子。

image-20210531192343838

link:【QT】 Qt多线程的“那些事” - 李春港 - 博客园 (cnblogs.com)

音视频库

audio

使用QSoundEffect独立声音播放线程 movetothread方式

1. 自定义语音类型播放,声音播放优先级最高,单次不循环 会覆盖播放
2. 自定义语音类型播放,声音播放优先级最低,单次不循环 不会覆盖播放
3. 播放第三方文件夹下语音名称,声音播放优先级最高,单次不循环 会覆盖播放
4. 暂停播放

image-20210601092359507

使用方式

#include "audiothread.h"
...
   //自定义声音播放线程
    AudioThread audio_1;
    AudioThread audio_2;
..
    
    audio_1.play(VOICE_TYPE::VOICE_RECOPSAA);
	audio_2.play(VOICE_TYPE::VOICE_TOOFAR);

vedio

OpenCV版本:

纯OpenCV取帧显示+人脸算法/活体检测一些应用

在这里插入图片描述

OpenGL版本:

使用岳超的mvcamera库 对usb单/双目镜头取帧后的yuv图像通过QOpenGLWidget渲染显示YUV图像数据,示例demo如下

在这里插入图片描述

QWidget

一些QWidget常用的方法

1.//右下角弹出框类
2.//托盘图标类
3.//弹出信息框类
4.//弹出输入框类
5.//弹出日期选择对话框
6.//图形字体处理类
7.//全局静态UI方法类
8.//widget样式表

在这里插入图片描述

QML

推荐两个开源的QML UI组件库

image-20210531192932183

  1. MaterialUI,谷歌开源UI库

    link: GitHub - qml-demo/qml-material: qml-material UI:一款已经封装好的框架材料

  2. Toou-2D

    link: Toou 2D 拿来即用,为简单而生。 | Toou-2D

以上所有的轮子源码,以及使用demo
在这里插入图片描述
下载地址:
Qt轮子包合集下载

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Qt是一种跨平台的GUI编程框架,被广泛应用于软件开发领域。以下是一些常用Qt GUI编程指令合集。 1. QWidget类:Qt中的基类,用于创建窗口部件。可以通过继承QWidget类来创建自定义的窗口部件。 2. QApplication类:代表整个应用程序,负责处理应用程序的初始化和事件循环。 3. QMainWindow类:用于创建主窗口应用程序。可以添加菜单栏、工具栏、状态栏以及中心部件等。 4. QLabel类:用于显示文本和图像。可以设置文本的字体、颜色以及对齐方式等。 5. QPushButton类:用于创建按钮。可以设置按钮的文本、图像以及点击事件的响应函数。 6. QLineEdit类:用于输入单行文本。可以设置输入框的提示文本、格式验证以及输入内容的获取。 7. QComboBox类:用于创建下拉列表框。可以设置下拉列表的选项和当前选择项的获取。 8. QRadioButton和QCheckBox类:分别用于创建单选按钮和复选框。可以设置选中状态以及状态改变时的响应函数。 9. QSlider类:用于创建滑动条。可以设置滑动条的范围、当前值以及数值变化时的响应函数。 10. QGridLayout类:用于创建网格布局。可以将窗口部件按照行列进行排列。 11. QBoxLayout类:用于创建纵向或横向的盒式布局。可以将窗口部件沿一个方向进行排列。 12. QMessageBox类:用于显示消息对话框。可以设置对话框的图标、按钮和响应结果的获取。 总结起来,以上列举的指令只是Qt GUI编程中的一小部分常用指令,Qt还有很多其他类和函数可以用来构建精美的用户界面。通过学习和使用这些指令,可以方便地创建自定义的GUI应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZLOZL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值