Qt
文章平均质量分 50
他过江
分享C/C++/Linux/Qt/音视频/FFmpeg/OpenCV等相关技术。
展开
-
Qt常用代码笔记
窗口设置:setAttribute(Qt::WA_TranslucentBackground); //设置成透明的,背景色都没了setWindowFlags(Qt::WindowStaysOnTopHint); //始终显示在顶层setWindowFlags(Qt::FramelessWindowHint); //去掉边框截屏API:1. QPixmap pixmap = QP...原创 2019-01-08 19:05:59 · 1265 阅读 · 0 评论 -
Qt+FFmpeg录屏录音
源码:Qt+FFmpeg录屏录音录屏功能支持:开始,暂停,结束。 使用Qt+C++封装FFmpeg API,没有使用废弃的FFmpeg API。 主线程:Qt GUI线程,以后可接入录屏UI。 MuxThreadProc:复用线程,启动音视频采集线程。打开输入/输出流,然后从fifoBuffer读取帧,编码生成各种格式视频。 ScreenRecordThreadProc:视频采集线程,.....................原创 2019-03-06 23:56:47 · 9821 阅读 · 21 评论 -
Qt在任务栏图标和系统托盘图标上显示红点
关键类:QWinTaskbarButtonUI可以参考OBS录制开启。checked为true显示红点,false不显示红点。使用QWinTaskbarButton::setOverlayIcon设置覆盖图标。原创 2024-05-01 02:04:12 · 711 阅读 · 1 评论 -
基于Qt+FFmpeg的视频监控系统
假设一个业务场景:每个员工工位旁有两个网络摄像头。老板需要一个员工监控软件,在上班时软件可以拉取RTSP视频流,也可以随时录制视频。这样老板就可以知道谁在摸鱼了 ◕‿◕为防有人上纲上线,在此特别声明:上面的场景是开玩笑的。监控软件有很多使用场景:学校,公安,交通,考试,零售等等。原创 2023-05-17 14:30:16 · 1135 阅读 · 2 评论 -
VS+Qt开发环境
VS:推荐VS2017以后的版本Qt:推荐Qt5.12以后的版本。原创 2023-03-29 13:55:11 · 1589 阅读 · 1 评论 -
Qt6.4.2下载安装-简单快速地安装
在命令行中执行安装器,添加 --mirror https://mirrors.ustc.edu.cn/qtproject 参数。在命令行中执行安装器,添加 --mirror https://mirrors.ustc.edu.cn/qtproject 参数。新版本的安装器(4.0.1-1 后)支持 --mirror 命令行参数。原创 2023-02-05 03:34:27 · 3519 阅读 · 0 评论 -
简单的RTSP播放器
简介windows平台,纯视频流播放,暂不支持音频。局域网延迟在200到300毫秒。开发环境WIN10VS2017Qt5.12.9FFmpeg4.3.1 64位github地址效果图原创 2022-02-20 18:20:52 · 2282 阅读 · 0 评论 -
Qt控件设置动态样式
方法1 每个子控件都设置动态属性UI文件设置按钮qss:QPushButton#option {background: #FFFFFF;color: #999999;}// option和[之间不能有空格QPushButton#option[itemSelected = "true"] {background:rgb(65,205,82);color:white;}QLabel#text {color: #333333;}QLabel#text[itemSelecte原创 2022-02-15 00:40:32 · 1525 阅读 · 0 评论 -
Qt信号槽传const&和传值有什么不同
之前一直在纠结Qt的信号槽是否要传引用,如果传引用会不会有悬挂引用的问题。故参考Copied or Not Copied: Arguments in Signal-Slot Connections?这篇博客测试一下CopyTest.h#include <QObject>class CCopyable{public: // qRegisterMetaType的类需要默认构造函数 CCopyable(); CCopyable(int id, const原创 2021-06-10 14:13:16 · 1762 阅读 · 0 评论 -
Qt在视频窗口上显示半透明控件
场景:视频窗口QLabel的句柄传给DXVA,由DXVA渲染。在视频窗口上显示半透明的控件(文本)。如果是纯Qt渲染的话,显示透明控件只需要设置qssrgba的a,例如:QLabel{background:rgba(255,0,0,0.3);}但是当把Qt控件交给原生UI(这里我用的是DXVA2,目的是GPU硬解码和渲染)显示视频流的时候,透明就失效了。首先视频窗口和透明控件不能是父子对象关系,否则子对象(透明控件)会直接隐藏,所以必须是同级的。解决方法:子类化QLabel,设置.原创 2021-06-08 23:55:12 · 2515 阅读 · 0 评论 -
QtAV编译和使用
环境:x64 QtAV1.13 Qt5.12.10 VS2017 FFmpeg4.3.2编译步骤:git clone https://github.com/wang-bin/QtAV.gitcd QtAV && git submodule update --init可以下载官方推荐的FFmpeg依赖包:https://sourceforge.net/projects/qtav/files/depends/QtAV-depends-windows-x86%2Bx64.原创 2021-03-10 22:08:25 · 1101 阅读 · 0 评论 -
Qt USB摄像头支持热插拔
1.注册USB摄像头插拔事件bool util::registerDevNitification(QWidget *widget){#if 1 static const GUID GUID_DEVINTERFACE_LIST[] = { // GUID_DEVINTERFACE_CAMERA_DEVICE { 0x65E8773D, 0x8F56, 0x11D0, { 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x3.原创 2021-01-31 18:03:47 · 1351 阅读 · 0 评论 -
Qt VS *.vcxproj.user文件设置
VS对Qt的支持不太友好有时候会提示找不到Qt的头文件,但是其实是有的。这时候在项目目录下编辑 ProjectName.vcxproj.user文件输入如下:<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup /> <原创 2020-12-19 18:23:50 · 1289 阅读 · 3 评论 -
centos7 cmake链接Qt静态库
环境:centos7 cmake3.15 Qt5.12.9编译Qt静态库mkdir build && cd build创建build.sh,内如如下:../qt-everywhere-src-5.12.9/configure \-verbose \-opensource \-release \-static \-confirm-license \-make libs \-nomake tests \-nomake examples \-skip qtmacextra原创 2020-11-04 00:02:47 · 1682 阅读 · 1 评论 -
Qt遇到的问题或bug
1. DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80070003原因:QUrl::fromLocalFile路径是相对路径,改成绝对路径就好了(app所在目录)原创 2020-09-27 22:42:50 · 605 阅读 · 0 评论 -
适用于低配机器,从USB摄像头拉H264流的Qt播放器
解决方案:dshow拉H264流+h264_qsv硬解码+d3d渲染一拉H264流最近发现FFmpeg不支持从USB摄像头拉H264,只能拉到MJPEG流。而MJPEG流又不能用来推流,目测只能用H264推流。所以下面直接用DirectShow拉H264流。dshow的用法可以参考msdn和amcap源码。这里我创建了个CaptureWorker类,继承ISampleGrabberCB。这样就能在回调函数BufferCB中拿到H264数据包。class CaptureVideo :..原创 2020-07-25 00:03:00 · 2451 阅读 · 7 评论 -
Qt笔记
Qt各平台编译器:linux:./configure -platform linux-clang./configure -platform linux-g++./configure -platform linux-g++-32windows:configure.bat -platform win32-g++(mingw)configure.bat -platform win32-msvc在windows平台,要么是msvc,要么是mingw。目前知道的Qt msvc和min原创 2020-05-26 23:15:47 · 414 阅读 · 0 评论 -
protobuf的使用
编译protobuf:下载源码,使用CMake编译。注意我的项目用的是Qt mingw编译器,所以在CMake选择编译器的时候要选择mingw,而不是msvc。使用mingw编译出来的库:protobuf.a,然后加上源码中的google/protobuf目录,事实上这里面有很多.proto文件和源文件可以删除了,甚至很多头文件都用不上。网上没见到提到这一点。网上有的博客说编译动态库比较好,其实并不是。.pro配置protobuf静态库:#添加使用mingw编译的protobuf库I原创 2020-05-22 00:47:21 · 833 阅读 · 8 评论 -
Qt工程配置(.pro文件)
Debug:LIBS += -L folderPath // Debug版引入的lib文件路径Release:LIBS += -L folderPath // Release版引入的lib文件路径2.定义编译选项DEFINES += XX_XX_XXX添加了这个后在.cpp文件中就可以使用#ifdef XX_XX_XXX3.添加资源文件RC_FILE = xxx.icns仅限win32平台:win32{ SOURCES += hello_win.cpp}添加子项目...原创 2020-05-22 00:15:55 · 653 阅读 · 0 评论 -
Qt Creator bug "启动程序失败,路径或者权限错误"
IDE:Qtcreator今天发现了一个bug,Qt生成的exe需要管理员权限(uac)才能打开。但是我并没有设置uac权限啊,很奇怪。折磨了好久才找到一个博客提到:我的target设置成UpdateClient了,改成其它名字后重新构建就没问题了。Qt这个bug真是醉了,项目名字还不能带update和unstaller。...原创 2020-04-20 22:12:11 · 957 阅读 · 0 评论 -
QWebEngine的坑与Qt窗口切换导致的闪烁
QWebEngine的坑1.崩溃原因是没有delete析构。解决方法: delete m_webEngineView; m_webEngineView= nullptr;2.闪屏在窗口设置了下面这个属性后就会在切换窗口的时候闪屏。setWindowFlags(Qt::FramelessWindowHint); //去掉边框解决方法: //在...原创 2019-11-19 19:12:36 · 4557 阅读 · 14 评论 -
16进制QString和unsigned char数组互相转换
17位16进制mac字符串转为6位字节数组demo: unsigned char* byteArr = hexStringToByteArray(QString("A1-B2-C3-D4-E5-F6")).data();QVector<unsigned char> hexStringToByteArray(const QString& strMac){ Q...原创 2019-11-16 02:03:02 · 5727 阅读 · 0 评论 -
Qt将对象移到新线程的注意事项
Qt有一个术语Thread Affinity:QObject的实例具有线程亲和力,意思是该object接收到queue signal和posted event会运行在该object所在线程。将对象移动到新线程:void QObject::moveToThread(QThread* targetThread)作用:改变object和它的children的thread affini...原创 2019-08-15 21:25:39 · 3389 阅读 · 3 评论 -
Qt调用FFmpeg命令录屏
//列出音视频设备ffmpeg -list_devices true -f dshow -i dummy//录屏命令ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (High Definition Audio 设备)" -pix_fmt yuv420p -vcodec libx264 -acodec aac -s 1440x900 ...原创 2019-02-25 20:55:54 · 3611 阅读 · 1 评论 -
Qt+FFmpeg录音
源码下载地址ScreenRecordImpl.h#pragma once#include <Windows.h>#include <atomic>#include <condition_variable>#include <mutex>#include <QObject>#include <QString>...原创 2019-03-04 22:01:49 · 1610 阅读 · 2 评论 -
Qt元对象系统
Qt元对象系统提供三个机制:信号槽 运行时类型信息 动态属性系统一 信号槽先看一个demo://moc_test.h#pragma once#include <QObject>class Counter : public QObject{ Q_OBJECTpublic: int value() const { return m_valu...原创 2019-05-29 22:46:25 · 507 阅读 · 1 评论 -
Qt源码分析(一)
源码面前,了无秘密。阅读源码能帮助我们理解实现原理,然后更灵活的运用。接下来我用VS2015调试Qt5.9源码。首先提一下,Qt在WinMain中调用用户的main函数:我们知道,Qt的类以QObject为首,QWidget,QLabel之类的都是其子类(直接或间接继承)。那么先来看看QObject的源码,我在下图打了个断点:void debugQtSource(){...原创 2019-06-12 22:38:46 · 14088 阅读 · 1 评论 -
Qt添加日志模块
Log.h#pragma once#include <QMutex>#include <QString>#define LOG_FILE_NAME QString("/Log/") + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss") + QString(".log")static ...原创 2019-01-02 23:47:09 · 3146 阅读 · 1 评论 -
Qt中处理Tcp粘包
处理粘包的方式是在消息头部加上消息总长度。采用该格式:消息总长度len(4字节)+命令字commandId(4字节)+消息msg。思路是用一个buffer,每次有消息就读完,然后判断buffer长度,收到四字节长度len后,根据len收消息,当buffer.size()>=len,这时已经收到一个完整的包就可以处理了,处理完后就将buffer前len个字节删除掉,如此反复。...原创 2019-01-09 23:01:44 · 3563 阅读 · 0 评论 -
Qt安卓用logcat显示Qt的日志
Logger.h#pragma once#ifdef ANDROIDvoid InstallLogcatMessageHandler(const char *TAG);#else#define InstallLogcatMessageHandler(TAG)#endifLogger.cpp#if defined(ANDROID)#include "Logger.h"...原创 2019-01-16 22:46:40 · 772 阅读 · 0 评论 -
Qt信号与槽理解
信号槽连接的两种常用方式://错误,使用宏的方式连接一定要注意信号和槽的参数connect(m_firstWindow, SIGNAL(SendData()), m_server, SLOT(PostData()));1)connect(m_firstWindow, SIGNAL(SendData(std::vector<char>)), m_server, SLOT(Post...原创 2019-01-16 22:58:58 · 767 阅读 · 0 评论 -
Qt+FFmpeg录屏
源码录屏功能支持:开始,暂停,结束。 使用Qt+C++封装FFmpeg API,没有使用废弃的FFmpeg API。 主线程:Qt GUI线程,以后可接入录屏UI。 父线程(读):ScreenRecordThreadProc() 打开输入/输出流,创建子线程,然后从fifoBuffer读取帧,编码生成各种格式视频。 子线程(写):ScreenAcquireThreadProc() 从输...原创 2019-02-27 23:54:47 · 7058 阅读 · 19 评论 -
Qt程序打包发布
一.将要安装的文件放在一个目录FileToInstall1. 编译release版本,获得program.exe.2. 将exe放到一个单独的目录,运行windeployqt program.exe,然后会生成Qt相关的dll3. 添加msvcp140.dll,vcruntime140.dll4. 添加多线程调试需要的运行库:api-ms-win-core-file-l1-2...原创 2019-03-07 00:24:15 · 776 阅读 · 0 评论 -
VS2015调试Qt5.9源码
首先要下载Qt源码,我用的是Qt5.9.7.然后在Solution->Property->Debug source files中输入源码路径:光有源码还不够,还需要pdb文件(symbols)。有两种办法让VS找到pdb文件。直接将pdb文件拷贝到源码中对应的目录 在Tools->Options->Debugging->Symbols中添加pdb所在...原创 2019-06-12 20:13:04 · 880 阅读 · 0 评论 -
Qt模拟鼠标点击事件
目的是通过坐标模拟鼠标事件点击事件。关键函数:QWidget::childAt(pos);其中pos是相对于QWidget的坐标,坐标一般有两种:全局坐标和相对坐标。通过mapToGlobal()之类的API可以转换. QWidget* child = this->childAt(pos); QMouseEvent *pressEvent, *releaseEvent; p...原创 2019-01-05 00:49:08 · 11405 阅读 · 2 评论