
Qt
文章平均质量分 58
Qt是Digia公司的产品,这是一个跨平台的C++GUI开发框架,也支持python,目前Qt逐步取代MFC,成为大多数公司开发GUI程序的主要选择,其丰富的类库和一份代码不同编译的跨平台性,使得Qt成为C++程序员很有必要去学习和掌握的框架,一起领略信号槽的魅力。
Qt上位机开发
从事上位机软件商业应用开发6年,精通Qt编程,熟悉C++语言、C语言、TCP/UDP编程、多线程编程
展开
-
Qt之QTableView显示鼠标悬浮下的项的信息
首先想到的思路就是鼠标悬浮事件,即安装QTableView的事件过滤器,然后在eventFilter进行判断即可。实现很简单,主要在针对qt界面处理子界面的事件响应时,主要是还没搞清楚ui.tableView->viewport()->installEventFilter(this)的使用场景,就先记录一下。网上有一种说法,还需要使用ui.tableView->viewport()->installEventFilter(this),否则QTableView的事件过滤器无效,不过我目前还没有遇到这种情况。原创 2022-12-12 17:40:09 · 2615 阅读 · 1 评论 -
Qt实现TCP客户端和服务器通讯程序
复习的心态过一遍之前基础的一些东西,Qt封装了QTcpServer和QTcpSocket两个类,其中QTcpServer继承自QObject,通过listen()函数监听传入的客户端连接,当Client连接上时,QTcpServer会发出newConnection的信号,在对应的槽函数中使用nextPendingConnection()拿到连接的客户端的句柄和信息。而QTcpSocket则是读写数据的时候使用,过程很简单。服务器流程:listen->newConnection->next原创 2022-03-18 22:48:55 · 4000 阅读 · 5 评论 -
Qt之connect函数—信号槽连接的几种方式和优缺点
connect函数在qt中作为连接信号和槽的函数,并不陌生。它目前有以下3种写法:1、使用SIGNAL和SLOT宏connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(onPushButtonClicked()));2、使用&类名::函数名connect(ui->pushButton_2,&QPushButton::clicked,this,&Widget::onSetBlockedSignalStatu原创 2022-03-18 16:45:16 · 8907 阅读 · 0 评论 -
Qt之QObject::blockSignals函数的使用和理解
在某些业务下,需要阻塞住对象某个信号的发送,避免它触发对应的槽影响到后续的操作。可以通过bool QObject::blockSignals(bool block)来做简单的处理。从qt的帮助文档可以了解到,如果blockSignals(bool block)的参数block设置为true,那么信号的发送会被阻塞,反之不会阻塞。而且被阻塞时,发出的信号不会被缓存。即使对象的信号被阻塞住,也对destroyed()信号没有影响。可以通过signalsBlocked()函数来判断某个对象的信号是原创 2022-03-18 16:08:38 · 3407 阅读 · 0 评论 -
Qt 在Release 模式下 在控制台显示qDebug的打印信息
1、如下图所示:将Release下的预处理器中QT_NO_DEBUG去除。2、将链接器下的系统中的子系统,修改为控制台原创 2021-09-23 11:02:49 · 3298 阅读 · 0 评论 -
MFC中LoadLibrary调用Qt动态库失败的原因
今天在不同的电脑用mfc使用LoadLibrary调用qt的动态库,在某些电脑成功,某些电脑又失败。开始以为是宽字符的原因。可以看到在UNICODE编码下,LoadLibrary实际上是LoadLibraryW。于是改成 HMODULE hDll = LoadLibrary(TEXT("qtdialog.dll"));还是失败。网上查了一下,可能是qt的动态库依赖不够,所以用PowerShell中的dump工具查看它的依赖,发现缺少了msvcp140.dll。添加上后,调用正常。在...原创 2021-06-23 09:51:53 · 1474 阅读 · 0 评论 -
Qt 实现读写xml
目录定义:用途:写入效果:核心代码:定义:XML(Extensible Markup Language)即可扩展标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。用途:XML设计用来传送及携带数据信息,不用来表现或展示数据,HTML则用来表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。(摘自维基百科)熟悉对xml的操作,在项目开发中非常重要。qt中提供了几种类可以对xml进行处理。本次介绍的是QX原创 2021-04-12 14:17:29 · 486 阅读 · 0 评论 -
Qt 实现动态矩阵界面
在某些场合,需要呈现多个图表或者界面,但是图表的个数是不固定的。就可以先生成一定数量的父对象,来承接图表。同时在界面预览不够时增加滚动条效果。核心思路:利用Qt布局的QGridLayout-栅格布局与QScrollArea结合效果如下:demo核心代码:for(int i=0;i<200;i++){ LabelModel *label = new LabelModel(this); label->setMinimumSize(100,200); connect(l原创 2021-04-09 14:19:44 · 1333 阅读 · 0 评论 -
Qt程序 获取windows睡眠和亮屏时的状态
在某些业务需求下,Qt的程序需要感知到windows睡眠和亮屏时状态以便程序做对应的处理动作。好在Qt为我们提供了QAbstractNativeEventFilter类来捕获对应的windows事件。一、步骤如下:1、主界面MyMainWindow类继承QAbstractNativeEventFilter2、重载virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result);原创 2021-04-09 13:54:54 · 2481 阅读 · 0 评论 -
Qt之QListWidget实战
介绍QListWidget是一个与QListView类似的列表视图类。作为Qt常用的视图类,它提供了很多简便的函数,方便对列表中的项进行展示和操作。当项大于窗口高度时,会自动弹出滑动条。以下是QListWidget的添加项、删除项、清空列表、重命名,右键菜单弹出,双击事件等功能。重命名效果所有代码头文件#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QListWidget>原创 2021-03-01 10:04:50 · 2528 阅读 · 0 评论 -
Qt实现 QOpenGL绘制彩色三角形
QOpenGLWidget类封装了opengl,比起原生的opengl,使用起来很方便。只需要让子类继承QOpenGLWidget。OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、原创 2021-01-16 12:24:59 · 1146 阅读 · 0 评论 -
PyQt实现 计数器--快速掌握python开发桌面软件
目录1、PyQt介绍2、界面效果3、主要代码4、全部代码(拷贝即可运行)1、PyQt介绍PyQt是python的GUI框架之一,这是一个跨平台的UI框架,即可以运行在windows、Linux、Mac上,可以用来替换Python内置的TKinter。PyQt支持Python2.x和Python3.x。而Qt是Digia公司的产品,是一个跨平台的C++GUI开发框架,也支持python,目前Qt逐步取代MFC,成为大多数公司开发GUI程序的主要选择,其丰富的类库和一份代码不同编原创 2021-01-16 10:30:16 · 1529 阅读 · 8 评论 -
Qt实现 结合opencv播放mp4
目录1、opencv介绍2、效果图3、下载并编译opencv源码,生成DLL4、核心代码1、opencv介绍opencv的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库,底层代码由C++编写,拥有c++、python、java等接口。因为其跨平台特性,被广泛运用于:人脸识别,图像处理、人机交互等领域。2、效果图本项目实现了通过opencv+qt播放视频的功能。其中用qt制作前端,opencv负责处理视频的解码过程。原创 2021-01-10 21:01:58 · 1733 阅读 · 2 评论 -
Qt--实战小经验
目录1、判断字符串是不是数字2、设置按钮背景图状态(鼠标悬浮,鼠标按下)3、保留n位有效数字或小数4、解决因代码存在中文导致出现“常量中有换行符”的错误5、Qt之QPushButton实现文本省略...6、通过读取文件设置qss7、手动计算进度条百分比8、传参设置字体9、杀死第三方软件或后台进程10、lineEdit限制输入特殊字符并设置密码输入模式11、tableview设置某行的一个项无法被选择12、获取函数运行的时间13、取消当前项被选中后的颜色原创 2021-01-09 12:47:19 · 1595 阅读 · 0 评论 -
Qt实现 自定义矩阵布局
当界面需要同时展示多个项的时候,可能需要一个矩阵来填充数据,因为不知道数据项的多少,所以自定义行列就显得尤为重要,比如可能需要在一台电脑同时显示多个报表的数据,如果一直切换,因为无法比较各个报表的数据,难免不够直观,这种时候,通过矩阵布局同步显示一般是首选方案。效果展示:本次采用的技术是qt,思路是通过在矩阵上布局对应的控件,以搭载数据的显示,这样子数据就可以放到对应的承载控件上显示。通过行列号的设置来随时切换布局效果,矩阵同时支持随主界面大小的改变而改变,以适应不同的场景需求。原创 2021-01-08 21:41:39 · 1664 阅读 · 0 评论 -
Qt实现 在Thread子线程里处理耗时业务
目录1、QThread2、何时使用线程3、不使用多线程会有什么现象4、使用线程处理耗时操作5、线程退出注意点1、QThreadQThread类提供了一种独立于平台的方式来管理线程。一个QThread对象管理一个线程。QThread在run()中开始执行。通过start()启动线程,quit()和wait()结合来退出线程。2、何时使用线程当需要处理比较耗时的操作,不希望影响到主界面的操作时,就可以考虑使用线程,来承接那部分耗时的任务。3、不使用多线程会有什么.原创 2020-11-21 16:53:19 · 2764 阅读 · 0 评论 -
Qt实现 内嵌CEF3制作浏览器(尾篇)
int main(int argc, char *argv[]){ //初始化cef bool flag = CefManager::instance()->CefInit(); if (!flag) { return -1; } QApplication a(argc, argv); QtCef w; w.show(); int ret = a.exec(); CefManager::instance()->CefQui...原创 2020-11-16 21:57:34 · 7005 阅读 · 1 评论 -
Qt实现 基于ffmpeg拉流播放视频
1、前言ffmpeg作为开源库,具备跨平台性,被广泛使用于各大视频软件和网站,在视音频开发中占有极其重要的地位。Qt同样支持跨平台,因此结合qt+ffmpeg制作跨平台视频播放器是比较合适的做法。2、思路目前有一个界面类和解码类,其中界面类负责视频的显示工作,解码类的解码过程运行在子线程中,避免解码在主线程中进行,影响界面播放效果。二者的信息交互通过qt的信号槽关联,视频的绘制则采用QPainter绘制。3、采用技术如下1、QThread线程类2、QPainter绘制类3、F原创 2020-11-15 01:02:27 · 5541 阅读 · 3 评论 -
Qt实现 SDL嵌入Qt窗口中绘制图片
1、SDLSDL用C编写,可与C ++一起使用,并且可用于其他几种语言,如C#和Python,支持Windows,Mac OS X,Linux,iOS和Android,是一套开放源代码的跨平台开发库。SDL多用于开发媒体播放器、游戏等多媒体应用领域。首先需要下载SDL,引入其头文件和库SDL下载地址:http://www.libsdl.org/因为我是用vs2015开发,所以下载的是上面这个。首先在代码中需要引入SDL头文件和库。#include "SDL.h"#unde原创 2020-11-05 22:46:01 · 5233 阅读 · 7 评论 -
Qt实现 获取程序所在的各种路径
记性不好,权当记录一下1、返回包含exe的目录(绝对路径)QCoreApplication::applicationDirPath()如D:/qt_coding/build/debug2、返回exe可执行文件的路径(绝对路径)qApp->applicationFilePath()如D:/qt_coding/build/debug/test.exe3、返回exe当前目录(绝对路径)QString QDir::currentPath()如D:/qt_coding/build4、原创 2020-10-24 11:48:51 · 4984 阅读 · 0 评论 -
Qt实现 内嵌CEF制作浏览器(首篇)
介绍cef支持跨平台,是基于Chromium的开源浏览器控件,全称Chromium Embedded Framework。本文主要介绍如何下载cef以及编译windows下的cef项目,并运行查看浏览器显示效果。QT内嵌CEF优势:Qt自带QWebEngine模块,可以快速实现浏览器,但是在实际使用中,在某些AMD显卡电脑运行使用了QWebEngine的qt软件,会卡顿甚至奔溃,坑还是比较多的。选择cef就可以避免这种问题。开发准备cef下载网址:http://opensource.sp原创 2020-10-20 14:53:57 · 24252 阅读 · 16 评论 -
Qt实现 访问web并解析json数据
浏览器访问qt访问并解析#include "widget.h"#include "ui_widget.h"#include <QNetworkAccessManager>#include <QNetworkReply>#include <QJsonDocument>#include <QJsonObject>#include <QEventLoop>#include <QDebug>Widget::Wid原创 2020-10-20 11:28:18 · 1876 阅读 · 1 评论 -
Qt实现 Http网络在线下载程序(支持断点续传功能)
开发过程中遇到了一些坑,花了半天时间搞。出现了很多理论上不应该出现的bug。访问https前,需要添加libcrypto-1_1.dll与libssl-1_1.dll到Qt\5.14.0\mingw73_32\bin或者exe目录下。下载地址:http://slproweb.com/products/Win32OpenSSL.html需要注意一下32位和64位,应下载与自己Qt编译器位数一致的版本。下载好后直接安装,然后到安装目录拷贝即可。一、gitHub地址二、功能支持输入url网原创 2020-05-23 00:47:52 · 3247 阅读 · 5 评论 -
Qt实现 字符串去除指定的字符
接口void parseData(QString &str){ char array[]={'n','b','a'}; //需要去除的字符 int length = sizeof (array)/sizeof (char); for(int i=0;i<length;i++) { QString tmp = QString(array[i]); if(str.contains(tmp)) {原创 2020-05-19 22:39:23 · 10924 阅读 · 0 评论 -
Qt实现 文件比较工具
目录一、gitHub地址二、功能三、界面效果四、主要代码一、gitHub地址https://github.com/KindMans/CompareFiles(更新中)二、功能目前具备检测文件夹下文件是否被修改的功能,以及比较两个文件夹下文件的不同。三、界面效果四、主要代码一、获取文件MD5码QString fileCallToMd5::getFileMd5(const QString &path){ if(path.isEmpty().原创 2020-05-14 01:22:58 · 3303 阅读 · 2 评论 -
Qt实现 可移动的无边框窗口
widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = nullptr); ~Widget(); vi原创 2020-05-11 23:58:08 · 820 阅读 · 0 评论 -
Qt实现 MusicPlayer(本地)
花了大半天时间撸了一个基于Qt5的音乐播放器玩玩,一、github地址github地址:https://github.com/KindMans/IMuiscPlayer(更新中)二、功能清单它目前目前具有以下功能:加载本地音乐、播放历史清单,上下歌曲切换,播放模式选择(顺序、单曲循环、随机播放)、音量调节、歌曲播放进度调节。采用的到Qt主要几个类为QMediaPlayer、...原创 2020-03-31 00:51:29 · 1281 阅读 · 1 评论 -
Qt信号和槽解释与使用方法
Qt信号和槽的理解:信号和槽机制是Qt的核心特征。可用于两个对象之间的通信。1、一个信号可以关联一个槽,或者多个槽。如果存在多个槽与某个信号相关联,那么当这个信号被发射时,槽的执行顺序与关联顺序相同。当然多个信号也可以关联一个槽。2、一个类的信号可以关联到其他类的槽。使用方法:对于信号和槽,需要使用SIGNAL和SLOT这两个宏connect(this,SIGNAL(emits...原创 2019-02-19 15:53:50 · 1715 阅读 · 0 评论 -
Qt正则表达式(匹配正数、负数、浮点数)
环境:QtCreator,功能:正则匹配正数、负数、浮点数QString text="-10";QString pattern("^(-?[0-9])|(-?\\d+)(\.\\d+)$"); //Qt匹配正数、负数、浮点数QRegExp rx(pattern);bool flag=rx.exactMatch(text.trimmed()); //trimmed() 去除字符串前后的...原创 2019-01-10 17:04:28 · 12012 阅读 · 4 评论 -
Qt实现 计算器
该计算器主要通过lineEdit获取和显示数字,通过tableview显示计算过程。main.cpp#pragma execution_character_set("utf-8")#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplica...原创 2018-12-18 15:43:59 · 624 阅读 · 1 评论 -
Qt实现 栅格布局效果
Qt提供QGridLayout类来实现栅格布局,所谓栅格,就是网格,拥有规律的行和列,通过QGridLayout可以很方便的对多个控件进行布局,下面是对QGridLayout使用的总结。#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainW...原创 2019-07-12 00:47:18 · 3048 阅读 · 2 评论 -
Qt实现 自定义标题栏并支持界面放大缩小、移动
首先重写mouseMoveEvent和mouseReleaseEvent事件,以及事件过滤器。public://鼠标移动事件void mouseMoveEvent(QMouseEvent *event);//鼠标释放事件void mouseReleaseEvent(QMouseEvent *event);//事件过滤器bool eventFilter(QObject *obj,Q...原创 2019-09-27 11:28:52 · 1643 阅读 · 0 评论 -
Qt实现 模态对话框以及窗口置顶
如果是Qdialog:QDialog dialog(this);dialog.exec();或者通过show()函数,前提是通过setModal()设置为模态。QDialog *dialog = new QDialog(this);dialog->setModal(true);dialog->show();如果是QWidget:QWidget *w = ...原创 2019-09-20 09:49:46 · 7578 阅读 · 1 评论 -
Qt实现 复制内容到剪贴板(文件,图片,文本)
复制文本:QClipboard *clip=QApplication::clipboard();clip->setText("hello qt"); //复制hello qt 到剪贴板复制图片:void MainWindow::on_pushButton_clicked(){ //复制图像,可粘贴到画图中 QImage *image=new QIma...原创 2019-09-01 16:29:46 · 13730 阅读 · 4 评论 -
Qt实现 QLabel显示文本与图片、动图
QLabel概念:在Qt中,QLabel类用于文本或图片(包括动图gif)的显示,并不提供用户交互功能。下面总结一下QLabel的常用场景。一、在界面显示与获取文本:ui->label->setText("hello qt"); //设置文本ui->label->text(); //获取文本二、在界面显示图片:一、使用QImage。...原创 2019-08-24 22:38:38 · 4097 阅读 · 0 评论 -
Qt实现 获取与设置控件的颜色(背景色,边框色,文本色)
设置控件背景色://将按钮的背景色设置为红色ui->pushButton->setStyleSheet("background-color:blue");获取控件的颜色:QPalette pal=ui->lineEdit->palette();//这里需要注意,输入性质的控件(如这里的lineEdit)用base(),如果是按钮用button(),不然...原创 2019-08-08 23:14:29 · 17646 阅读 · 7 评论