草庐IT

关于QT纯代码创建UI的方法和注意事项

前言温故而知新。之前新学QT时没怎么注意纯代码创建UI的写法,今天尝试着写了一下,却发现就一个简单的布局,总是显示不出来。所以索性研究了一下#include"ui_mainwindowtest.h"QTCreator自动编译生成的代码,将一些个人收获总结如下。一、QT的UI头文件里有什么?之前一直没注意,仅是创建了一个空白窗口,它的ui头文件里就出现了这么多代码。现将个人见解以备注地形式写在上面。#ifndefUI_MAINWINDOWTEST_H#defineUI_MAINWINDOWTEST_H#include#include#include#include#include#include

windows、Ubuntu安装QT时经常出现“无法下载存档……”解决办法

说明:以windows为例,ubuntu操作一样下载好exe执行文件,双击执行时,经常出现下图提示“无法下载存档……”,是由于默认使用的是境外源,有两种解决方式;方式一:挂魔法在线安装方式二:使用国内源清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/北京理工大学:http://mirror.bit.edu.cn/qtproject/中国互联网络信息中心:http://mirror.bit.edu.cn/qtproject/在qt的exe文件目录内右键-->在终端打开打开终端后在输入下面的命令(我的4.5.2版本,需换成你自己的exe可执行程序),回车后

Qt 绘制表白爱心【李珣表白爱心】

Qt绘制表白爱心【李珣表白爱心】通过QtPainter进行绘制,具体实现可以参考B站爱心绘制实现1.functions.h#include#include#defineIMAGE_ENLARGE15//心形函数QPointFheart_function(qrealt,qrealshrink_ratio=IMAGE_ENLARGE){qrealx=16*(sin(t)*sin(t)*sin(t));qrealy=-(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t));x*=shrink_ratio;y*=shrink_ratio;returnQPointF(x,y

QT解决报错registered using qRegisterMetaType()

在qt日常使用中,信号与槽机制是绝对不可或缺且常用的,其中的参数一般都会比较简单,bool、int、QString之类的,但当我们想要传递相对比较复杂的参数,例如QVector、QList,以及一些我们自定义的结构体时,就会出现报错:>QOBject::connect:Cannotqueueargumentsoftype'QVector'>(Makesure'QVector'isregistedusingqRegisterMetaType().)原因大概就是信号槽的参数不支持你自定义的类型,只能识别QT库中最基本的类型参数,所以需要对自定义类型进行注册qRegisterMetaTypeQVec

QT非UI线程更新UI(跨线程更新UI)

笔者最近在弄一个QT的一个小工具,需要把日志格式化输出,但是方法的执行过程是耗时的,如果不自己进行处理就会阻塞主界面,瞬间降低软件的使用体验。所以通过查资料发现QT的信号传递更新UI非常好用,记录一下,也给碰到类似问题的小伙伴直接提供一个参考。首先,另起的UI线程需要自己重写类继承Qthread线程基类,需要Q_OBECT宏具体代码如下(我这里新建的命名位XThread的类)XThread.h如下#includeclassXThread:publicQThread{Q_OBJECTpublic:XThread();protected:voidrun();signals:voidtoUI(QSt

Qt安装工具MaintenanceTool安装插件出现无法下载存档的解决方法

问题背景:在移植Qt项目时,代码中出现头文件QTextCodec无法找到的错误(QTextCodec是Qt5中的类,Qt6删除了该类),我使用的是Qt6版本,查阅解决方法,找到的方法要在Qt安装工具MaintenanceTool中添加组件Qt5CompatibilityModule遇到的问题: 1、点击添加或移除组件都会出现提示:YourMaintenanceToolappearstobeolderthan3.0.2PleaseupdateitfirsttogetaccesstonewQtpackages 2、添加组件,在下载的过程中出现:无法下载存档http://download.qt.io

使用 Qt for Android 获取并利用手机传感器数据(下篇)使用C++实现功能

在上一篇,我们搭建了开发环境。本篇,使用C++代码真正实现功能。我们使用UDP协议从手机上指定发送的目的地、端口。效果如下图,完整工程参考https://gitcode.net/coloreaglestdio/qtcpp_demo/-/tree/master/android/sensors2pc:移动端1移动端2桌面1.在PC端实现程序并调试我们建立一个Qt的Widgets程序,添加position,sensors模块。界面里支持设置目的地址、端口。界面里可以设置GPS与各个传感器的刷新速度。传感器使用Qt枚举,并创建刷新函数。传感器的主对话框类如下:#ifndefDLGSTP_H#defin

Mac 上 Qt6 加速下载官方步骤,无需 Fiddler、Nginx 或配置资料档案库

Mac上Qt6加速下载官方步骤,无需Fiddler、Nginx或配置资料档案库背景介绍操作步骤打开网站下载安装器查找可执行文件启动安装程序背景介绍QT官方仓库速度堪比百度网盘,直接启动下了一天没下好,既然国内那么多镜像站,那么理论上就可以使用镜像站进行加速。QT安装包提供了仓库地址的选项,但是仓库链接长什么样都不知道,试了几次都失败。无论是百度还是谷歌,搜到的大多是用Fiddler设置链接转发,还有Nginx反代,太麻烦了。Fiddler没有Mac端,且需要注册登录,还是试用版。Nginx配置太复杂,还要改hosts,实在非人类。因为清华镜像站一般带使用帮助,因此在清华镜像站上看了一下,还真是

Qt 中线程池的使用

1.线程池的原理我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务呢?线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助

Qt笔记-自定义QSet,QHash的Key

官方文档已经说得很详细了。Ifyouwanttouseothertypesasthekey,makesurethatyouprovideoperator==()andaqHash()implementation.Example:#ifndefEMPLOYEE_H#defineEMPLOYEE_HclassEmployee{public:Employee(){}Employee(constQString&name,constQDate&dateOfBirth);...private:QStringmyName;QDatemyDateOfBirth;};inlinebooloperator==(c