QT实战项目应用
文章平均质量分 58
OH,CGWLMXUP
这个作者很懒,什么都没留下…
展开
-
应用程序中启动第三方程序,并加入到某一个UI控件中使用
本次项目中需要在客户端程序中加入3DAI进程,同时要求课固定的位置以固定的比例加载到UI界面的控件上进行使用,实现方式如下:启动进程:void Utils::startExe(){ //创建进程 QString cmd = qApp->applicationDirPath() + "/test.exe -nolog"; STARTUPINFO si ...原创 2018-08-29 10:57:17 · 542 阅读 · 0 评论 -
实现带进度条效果的QPushButton
既上一片的实现QPushButton定制功能后,在此基础上增加可定制进度条功能void ProgressButton::paintEvent(QPaintEvent *event){ Q_UNUSED(event) QPainter painter(this); static QImage img; if (m_currentImage.isNull()) {...原创 2018-09-07 14:35:32 · 793 阅读 · 0 评论 -
Qt实现只运行一个程序实例,即只能同时启动一个应用进程 QLockFile QSystemSemaphore QSharedMemory
Qt实现只运行一个程序实例,即只能同时启动一个应用进程 QLockFile QSystemSemaphore QSharedMemory前言每次只运行应用程序的一个实例可能是必要的,以限制内存泄漏的问题,或者消除某些资源,文件,SQLite数据库等应用程序的两个实例之间的竞争问题。或者,原则上,应用程序只需要用户使用一个副本就行了。有两种方法可以用来解决这个问题:1、使用QLockF...翻译 2018-09-07 14:45:05 · 5885 阅读 · 1 评论 -
Qt解析json文件详解(项目实用)
Qt5中提供了很方便的用于解析Json数据的类,主要包括QJsonValue,QJsonArray,QJsonObject,QJsonDocument等。使用这几个类能够很轻易在C++端创建和处理Json格式的数据,或对Json数据进行序列化及反序列化等。QJsonValue类是用于保存所有类型的Json数据,它将Json数据归为下列6种基本类型:bool QJsonValue::Bool...原创 2018-09-09 19:40:41 · 625 阅读 · 0 评论 -
QT加载外部特定字体方法详解
输入字体文件路径,输出字体family:QString loadFontFamilyFromFiles(const QString &fontFileName){ static QHash<QString, QString> tmd; if (tmd.contains(fontFileName)) { return tmd.value(fon...原创 2018-09-09 19:40:33 · 6219 阅读 · 1 评论 -
QT获取音频总时长的方法(使用pcm、mp3等)
1,获取pcm银屏总时长的方法:输入音频所在路径,通过音频文件大小和采样率的数据计算pcm音频文件的总时长:qint64 getAudioTime(const QString &filePath){ QFile file(filePath); if (file.open(QIODevice::ReadOnly)) { qint64 fileSiz...原创 2018-09-09 19:40:25 · 7346 阅读 · 0 评论 -
QT删除文件夹以及多层文件夹下的所有内容
//删除文件夹bool Utils::deleteDir(const QString &path){ if (path.isEmpty()){ return false; } QDir dir(path); if(!dir.exists()){ return true; } dir.setFilter(QD...原创 2018-09-09 19:40:17 · 8202 阅读 · 1 评论 -
QT滚动条QSS美化
QString sss = "\ QScrollBar:vertical \ { \ border: none; \ margin:...原创 2018-09-09 19:40:10 · 2607 阅读 · 0 评论 -
项目启动的时候同时启动一个控制台,可以实时观测程序运行过程中的日志等运行情况
项目启动的时候同时启动一个控制台,可以实时观测程序运行过程中的日志等运行情况AllocConsole();freopen("CONOUT$", "a+", stdout); 效果如图:原创 2018-09-09 19:39:43 · 418 阅读 · 0 评论 -
最小化后从任务栏重新唤起界面卡住问题
如下重写onMin 和 onMax即可:void onMin(){ showMinimized();}void onMax(){ QDesktopWidget* desktopWidget = QApplication::desktop(); if (!isMaximized() && size() == desktopWidget->si...原创 2018-09-09 19:39:24 · 1743 阅读 · 0 评论 -
QT获取设备网络类型
enum NetType { Wireless, // 无线 Wired, // 网线 Other, // 未知};int netType(){ NetType nettype = Other;#ifdef Q_OS_WIN PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAda...原创 2018-09-13 14:55:48 · 787 阅读 · 0 评论 -
QT获取设备内存大小
unsigned int getPhysMem(){ static unsigned int size = 0;#ifdef Q_OS_WIN if (size == 0) { MEMORYSTATUSEX memoryInfo; memoryInfo.dwLength = sizeof(memoryInfo); GlobalMe...原创 2018-09-13 15:06:19 · 1333 阅读 · 0 评论 -
QT的QScrollArea使用详解
有些时候,我们界面能展示的区域被限定的很小,但是需要展现的控件、内容却很多,在限定大小的区域中无法全部显示。这个时候就需要滚动条了。在Qt中有一个很好的类 QScrollArea。有两种方式可是实现滚动区域:第一种直接用 Qt Designer 去设计ui文件:拖入QScrollArea然后进行布局即可。第二种是代码实现:QLabel *imageLabel = new Q...原创 2018-09-13 16:54:50 · 13984 阅读 · 1 评论 -
windeployqt工具来进行Qt的打包发布
Qt 官方开发环境使用的动态链接库方式,发布软件的时候需要复制一大堆 dll,工作量大而且很容易出错,导致exe在别的电脑里无法正常运行。因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe。正常编译完后直接打开会提示如下错误:执行发布程序的命令打开cmd窗口[如若不知道如何打开请自行搜索],将 windeployqt 和 应用程序 拖入CMD窗口 也可以...原创 2018-09-13 17:14:00 · 425 阅读 · 0 评论 -
QT之QSharedMemory 详解 进程间通信
QSharedMemory的几个重要接口:setKey(),这是标记共享内存的一个标识符,在整个操作系统的共享内存中,用这个key去标识它,唯一标识。create(),创建共享内存,向os申请内存空间,如果不创建,调用attach()会失败,在create()的时候,需要制定共享内存的大小,即字节数,跟windows的CreateFileMapping()一样,都是需要在create...原创 2018-09-13 17:27:38 · 9299 阅读 · 1 评论 -
QT中使用7z.exe将文件解压到置顶目录(覆盖解压)
bool do7z(const QString &path, const QString &dstPath){ QProcess m_7z; QString exe = "7z.exe"; QStringList args; args << "x" << path << "-o" + dstPa原创 2018-09-13 17:44:17 · 1699 阅读 · 0 评论 -
QT:用QWebSocket实现webchannel,实现C++与HTML通信
基本原理是通过channel将C++对象暴露给HTML,在HTML中调用qwebchannel.js。前提是建立transport,QT只提供了一个抽象基类QWebChannelAbstractTransport,需要自己进行实现,官方建议用QWebSocket实现,并给出了实例。1、实现Transport类,内置一个WebSocket套接字;2、实现新的channel类,内置一个WebS...转载 2019-02-18 15:43:58 · 2026 阅读 · 1 评论 -
自定义QPushButton特效按钮,可随图片变换不规则按钮控件和文字位置
自定义特效按钮,可随图片变换不规则按钮控件和文字位置可设置按钮不同状态的按钮和响应,通过重写鼠标等事件进行相关业务和操作处理头文件内容如下:#ifndef PIXMAPBUTTON_H#define PIXMAPBUTTON_H#include <QPushButton>class PixmapButton : public QPushButton{ Q_OB...原创 2018-09-07 14:25:17 · 1712 阅读 · 0 评论 -
半透明不规则Toast提示窗体,定时自动消失
项目中我们进场会用到Toast提示窗体,也就是常用到的半透明的不规则的提示小界面,会在指定时间自己消失掉,具体实现如下:#include <QTimer>#include "ToastWidget.h"#include "ui_ToastWidget.h"ToastWidget::ToastWidget(QWidget *parent) : QWidget(par...原创 2018-09-07 11:03:42 · 731 阅读 · 0 评论 -
QTextEdit的使用,文字课实时逐字变色(语音测评结果变色可用)
光标逐个向后移动进行判断并控制不同字体显示:效果如下:具体实现: TextDocument *document = ui->textEdit->document(); QTextBlock &currentBlock = document->begin(); QTextBlock::iterator it; QTextCurso...原创 2018-09-10 10:01:23 · 423 阅读 · 0 评论 -
进程间通信-TCP 单例方式
上一博文我们讲了如何在我们自己的程序中启动第三方的应用程序,并将其加载到我们的界面中,那么加载进来后的第三方应用程序我们如何操作并使用呢,下边我们首先采用TCP的方式讲述我项目中的进程间通信使用:这里我们使用QT的QTcpServer和QTcpSocket进行服务端和客户端的搭建实现,我们自己的应用程序作为服务端,第三方的程序作为客户端,通过协定的IP和端口号进行连接,具体实现如下:void ...原创 2018-08-29 11:07:00 · 606 阅读 · 0 评论 -
本地数据库操作(QSqlDatabase项目中的常用操作封装和使用)
数据库常用接口封装类:先将头文件贴上class DataBaseUtil{public: DataBaseUtil(); virtual ~DataBaseUtil(); /** * @brief loadDataBase 加载数据库 * @param database 数据库操作对象 * @param databaseName 数据...原创 2018-08-29 11:17:46 · 1866 阅读 · 0 评论 -
Qt网络编程之QNetworkRequest
Qt Network 模块中提供了一些高级别的类,例如:QNetworkRequest、QNetworkReply 和 QNetworkAccessManager,使用常见的协议执行网络操作。详细描述 QNetworkRequest类包含一个和 QNetworkAccessManager一起发送的请求。QNetworkRequest是Network Access API的一部分,并且...原创 2018-09-11 11:28:38 · 5906 阅读 · 0 评论 -
QT网络编程之文件下载 QNetworkRequest QNetworkReply QNetworkAccessManager
void FileDownLoad::start(){ m_file = new QFile(m_filePath, this);//m_filePath下载地址 if (!m_file->open(QIODevice::WriteOnly)) { emit result(false, tr("Write file error!\n") + m_file-&...原创 2018-09-11 11:47:39 · 1844 阅读 · 0 评论 -
QFile的项目应用
首先要注意的一点是QFile的打开和关闭要成对出现,不能出现open却没有close的现象,会造成内存泄漏、无法正常访问等问题出现,简单使用如下:QFile file(savePath);if (!file.open(QIODevice::WriteOnly)) { return;}file.write(array);file.close();文件创建:static boo...原创 2018-09-11 13:51:16 · 635 阅读 · 0 评论 -
QT写注册表
writeReg(){ QString installPath = QApplication::applicationDirPath(); QDir appDir(QDir::toNativeSeparators(QApplication::applicationDirPath())); appDir.cdUp(); QString starterFileWi...原创 2018-09-11 13:56:22 · 450 阅读 · 0 评论 -
QT的QCryptographicHash 文件加密
QCryptographicHash类提供了生成密码散列的方法。该类可以用于生成二进制或文本数据的加密散列值。目前支持MD4、MD5、SHA-1、SHA-224等。枚举QCryptographicHash::Algorithm:常量 取值 描述 QCryptographicHash::Md4 0 生成一个MD4散列 QCryptographicHash::M...原创 2018-09-11 14:10:29 · 2601 阅读 · 0 评论 -
项目中log日志文件的生成和管理
每个应用程序一般都会生成自己的log日志文件,用来记录使用过程中的一些关键操作和消息记录、响应等,同时方便问题的追踪定位,下边来介绍实战项目中到底如何生成管理项目日志:首先注册消息 qInstallMessageHandler(QtMessageOutput); static void QtMessageOutput(QtMsgType type, const QM...原创 2018-09-05 14:06:35 · 2167 阅读 · 0 评论 -
自适应屏幕DPI百分比,软件可根据系统设置的文本、应用等项目的大小自动放缩
自适应屏幕DPI百分比,软件可根据系统设置的文本、应用等项目的大小自动放缩首先来说一下什么是DPI:DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。win10的设置方式如下图:那么如何去自适应这个设置呢,来看一下具体实现:调用方式:EnableHighDPISupport(PROCESS_DP...原创 2018-09-05 17:55:31 · 5029 阅读 · 0 评论 -
curl+证书访问https QSslCertificate
SSL 服务器与客户端之间的通信有单向和双向 SSL 认证。单向 SSL 认证一般是客户端利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。双向 SSL 认证则除了需要对服务器的合法性进行认证,还需要按照单向 SSL 认...原创 2018-09-12 09:23:40 · 1097 阅读 · 0 评论 -
QT获取本机ip
QString localIp(){ QHostInfo info = QHostInfo::fromName(QHostInfo::localHostName()); // 找出一个IPv4地址即返回 foreach(QHostAddress address,info.addresses()) { if(address.protocol() =...原创 2018-09-12 09:25:19 · 166 阅读 · 0 评论 -
QT获取操作系统版本
static QString GetSysVersion(){ DWORD dwVersion = 0; WKSTA_INFO_100 *wkstaInfo = NULL; NET_API_STATUS netStatus = NetWkstaGetInfo(NULL, 100, (BYTE **)&wkstaInfo); if (netStatus =...原创 2018-09-12 09:29:20 · 2245 阅读 · 1 评论 -
QT获取cpu使用率
double getCpuUsage(){#ifdef Q_OS_WIN static FILETIME s_preIdleTime = { 0, 0 }; static FILETIME s_preKernelTime = { 0, 0 }; static FILETIME s_preUserTime = { 0, 0 }; static bool isFi...原创 2018-09-12 09:31:39 · 5363 阅读 · 2 评论 -
QImage, QPainter复合模式绘图 图片叠加模式 setCompositionMode
Qt的QPainter::CompositionMode提供了多种图像叠加的模式。常见的有QPainter::CompositionMode_SourceOver, QPainter::CompositionMode_SourceAtop,QPainter::CompositionMode_DestinationOver和QPainter::CompositionMode_Destination...原创 2018-09-12 09:33:32 · 6849 阅读 · 0 评论 -
QT之QAxWidget插件使用详解
官方的说明:QAxWidget类是一个包装ActiveX控件的QWidget。QAxWidget可以实例化为空对象,它应该包含ActiveX控件的名称,或者使用指向ActiveX控件的现有接口指针。仅使用QAxBase支持的数据类型的ActiveX控件的属性,方法和事件可用作Qt属性,插槽和信号。基类QAxBase提供了一个API,可以通过IUnknown指针直接访问ActiveX。QAxW...原创 2018-09-12 09:35:20 · 29546 阅读 · 5 评论 -
QT拷贝目录下的所有文件到另一个目录中
bool copyDir(const QDir& from, const QDir& to, bool cover){ if (!to.exists()) { if (!to.mkdir(to.absolutePath())) return false; } QFileInfoList fileInfoL...原创 2018-09-12 09:38:37 · 5634 阅读 · 1 评论 -
IPC(进程间通信)之QLocalServer和QLocalSocket实现进程间通信 包含接口说明
QLocalServer继承自QObject。QLocalServer提供了一个基于本地套接字(socket)的服务端(server)。QLocalServer可以接受来自本地socket的连接。server通过调用listen(),监听特定的连接。newConnection()是在每次server与client连接上时所发出的信号。nextPendingConnection()将...原创 2018-09-13 14:49:56 · 1017 阅读 · 0 评论 -
QT线程池 QRunnable QThreadPool使用 多线程使用
QRunnable类在Qt中是所有可运行对象的基类,代表了由run()函数表示的一个任务或一段要执行的代码。我们一般使用该类和QThreadPool来在另一个独立的线程中执行该代码。并且,如果QRunnable对象的autoDelete()设为true的话,QThreadPool会在run()运行结束后自动删除该对象。下边是一个例子,我们会有多个任务放到线程池中执行。任务类:class...原创 2019-03-27 16:46:10 · 645 阅读 · 0 评论