
QT
王者级废铁
博客就是备忘录,这里主要记录一些学习的内容或者总结
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
QString的应用
本文介绍了Qt中QString类的常用操作方法,主要包括:1.字符串操作:使用+、append()、sprintf()、arg()进行字符串拼接,insert()/prepend()插入字符串,replace()替换字符串;2.字符串查询:startsWith()判断起始字符串,contains()检查包含关系;3.类型转换:toInt()等数值转换,toUtf8()编码转换,与char*相互转换;4.字符串处理:比较大小(compare())、大小写转换(toUpper()/toLower())、分割字符原创 2025-07-21 08:49:41 · 107 阅读 · 0 评论 -
Qt/C++中的多线程同步机制详解
同步操作就像排队一样,你做一件事,得等到它完成才能继续做下一件事。比如你在电商网站购物,点了“购买”按钮后,系统会马上查库存,这时候你会看到一个加载的提示,必须等到库存查完才能继续支付。如果库存不够,系统会报错,你就不能继续操作了。异步操作则不同,你做一件事,不需要一直等着,可以继续做其他事情。比如你付完钱下单后,系统会给你发订单确认邮件。这个过程是异步的,你不用等着邮件发完,可以继续浏览网站或者做其他事情。邮件在后台自己发,就算发邮件出问题,也不影响你购物或者订单的有效性。异步。原创 2025-03-05 14:42:42 · 727 阅读 · 0 评论 -
QT多线程中的全局变量访问:为什么修改没有立即同步,需要使用锁或者原子操作
在多线程编程中,多个线程访问同一个全局变量时,可能会遇到内存可见性的问题:即一个线程的修改,另一个线程未必能立即看到。线程B访问 counter 的值:线程B读取counter时,可能会读取到自己缓存中的值(比如还是0),而不是线程A刚刚修改的10。这里我们使用了std::atomic来声明counter,这意味着对counter的所有操作都是原子的,且能够保证在不同线程之间修改的数据能够立即同步。为了确保线程B能够看到线程A的修改,我们需要使用一些同步机制,保证所有线程在访问共享变量时能够看到最新的值。原创 2025-03-05 13:11:00 · 511 阅读 · 0 评论 -
Qt使用pri和pro文件进行模块化编程
假如我想要做一个功能,这个功能用代码模块化实现出来,方便将来移植,比如音视频播放器的界面,将来想要在其他工程使用时,只需要将widget提升为音视频播放界面即可。当我们其他工程需要这个功能时,我们在调用的时候直接添加源码吗?1、假设举个例子,假设想要做两个模块化的功能,分别是加法和减法。在widget文件中可以直接使用上面两个的头文件了。3、在calcator中使用上面两个pri文件。2、将加法写在一个类中,减法写在另一个类。addModule.pri文件,作为加法。subModule.pri文件。原创 2025-02-13 16:04:00 · 389 阅读 · 0 评论 -
Qt文本高亮显示QSyntaxHighlighter
在 MyHighlighter 的构造函数中,我们定义了多个高亮规则。每个规则包含一个正则表达式和一个格式。我们用不同的格式来高亮显示时间、温度、湿度以及报警状态:时间:匹配方括号内的内容(如 [12:30]),设置灰色字体和浅灰色背景。温度:匹配 温度 字符串,使用紫色字体。湿度:匹配 湿度 字符串,使用紫色字体。报警状态:根据报警类型(正常、过低、过高)设置不同的颜色和字体样式。转载 2025-02-13 09:34:47 · 526 阅读 · 0 评论 -
Qt在函数中更新 UI 或重新绘制图形用replot和QTimer::singleShot的区别
在 Qt/C++ 中,有时你需要在某个函数中更新 UI 或重新绘制图形。在这种情况下,你可以选择直接调用更新函数(如 replot()),或者通过 QTimer::singleShot 来延迟执行更新操作。两者的主要区别在于执行时机、阻塞与非阻塞以及对事件循环的影响。原创 2025-02-13 08:30:32 · 499 阅读 · 0 评论 -
Qt多线程技术【线程池案例】:QRunnable 和 QThreadPool
线程池(ThreadPool)是一种用于管理和复用线程的技术。在多线程编程中,我们经常需要处理大量的小任务,频繁地创建和销毁线程会带来性能上的开销。线程池通过预先创建一定数量的线程来处理任务,任务完成后线程会被返回到线程池中等待下一次使用,从而避免了创建新线程的开销。线程池可以根据任务量动态地调整线程的数量,保持一定数量的线程处于空闲状态,并且通过合理调度任务来提高并发执行的效率。Qt为我们提供了 QThreadPool 和 QRunnable 类来轻松实现线程池机制。转载 2025-02-11 16:06:28 · 1099 阅读 · 0 评论 -
QT常用高频快捷键
Ctrl + F 查找/替换当前选中的内容,对与所选内容一致的部分进行高亮显示。Ctrl+Shift+down(向下箭头) 整行向下移动。Ctrl+Alt+down(向下箭头) 当前行向下复制。Ctrl+Shift+up(向上箭头) 整行向上移动。Ctrl+Alt+up(向上箭头) 当前行向上复制。Shift+down(向下箭头) 向下选中代码。Shift+up(向上箭头) 向上选中代码。Ctrl + Shift + < 折叠代码块。Ctrl + Shift + > 展开代码块。原创 2024-07-18 14:04:00 · 612 阅读 · 0 评论 -
Qt开机自启动
这段代码可以实现我们需要的功能,但是呢。有一个很重要的问题就是需要管理员权限才可以!对于使用MINGW32编译器的时候,使用管理员权限非常麻烦。但是不要紧,有一个办法既不要管理员权限,也可以实现开机自启。,写入这里是不需要管理员权限的。对之前的代码稍微更改注册表路径修改为。仅仅对当前用户有效。原创 2024-05-08 14:35:57 · 170 阅读 · 0 评论 -
Qt 全局热键之使用QxtGlobalShortcut实现
但是这样已经够我们使用了,只有你在这里的参数放入的是一个合法的快捷键或者快捷键组合的字符串(而非空字符串),那么就能检测出该快捷键是否被占用。QKeySequenceEdit一次可以输入4组快捷键,中间用,分隔开的,这是Qt提供给我们的,在帮助文档中可以看到。下载后解压出来放到我们新建的工程目录中,我们的qt工程是基于QWidget的,这里选择是这个(你可以选择其他的)我们可以捕获键盘输入的快捷键,然后按设置的快捷键就会触发,触发的次数会在label中显示出来。文件放在项目目录下,在项目.pro加入一句,转载 2024-04-09 15:21:21 · 430 阅读 · 1 评论 -
QCustomPlot一、QCustomPlot基础及画图显示
QCustomPlot本身可以设置交互行为,如放大,缩小移动,选择曲线交互,方法是:customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);QCustomPlot默认有成员QCustomPlot::legend实例(调用setVisible(true)显示),一般不需要自己构造QCPLengend,通过这个类你可以控制曲线说明的大小、颜色等属性。表示轴系统上的所有设置,如刻度,范围等。原创 2024-04-02 16:29:48 · 8351 阅读 · 1 评论 -
Modbus协议介绍
ModbusASCII有开始字符(和结束字符(CR LF),可以作为一帧数据开始和结束的标志,而ModbusRTU没有这样的标志,需要用时间间隔来判断一帧报文的开始和结束,协议规定的时间为3.5个字符周期,就是说一帧报文开始前,必须有大于3.5个字符周期的空闲时间,一帧报文结束后,也必须要有3.5个字符周期的空闲时间否则就会出现粘包的情况。CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。原创 2024-03-30 14:01:00 · 1421 阅读 · 0 评论 -
Qt操作txt文本文件
二、读取txt文件,按行读。原创 2023-12-13 00:24:30 · 3720 阅读 · 1 评论 -
Qt实现二维码生成和识别
QZxing开源库: 生成和识别条码和二维码下载地址:https://gitcode.com/mirrors/ftylitak/qzxing/tree/master。原创 2023-12-10 03:19:27 · 2460 阅读 · 5 评论 -
荔枝派nano中编译buildroot中加入Qt和tslib
再次编译buildroot,再编译好的buildroot中会出现output文件夹,然后output文件夹下有target文件夹,这个target文件夹就是将要打包的文件系统,目标目录,没有打包的rootfs包。首先交叉编译想使用版本的Qt源码,还有tslib库,编译好之后。然后将编译好的Qt库和tslib库放入target/opt中。原创 2023-09-26 15:57:46 · 626 阅读 · 0 评论 -
Qt给图片添加水印
【代码】Qt给图片添加水印。原创 2023-07-14 09:22:32 · 759 阅读 · 1 评论 -
基于嵌入式Qt的输入法syszuxpinyin自动弹出软件盘的问题
原因是控件无法重新获得焦点,只有当它失去焦点的时候才能重新获得焦点,所以你必须先点其他控件让它失去焦点,然后再点它。问题二:在默认情况下能输入完了以后没有点其他控件而再次输入,简单点就是说点第一次的时候可以弹出,第二次的时候不能。问题一:QLineEditt在默认情况下会自动出现焦点,从而导致一进入界面就弹出软键盘。移植好的syszuxpinyin输入法能正常的检测到控件焦点并自动弹出软键盘。但是我们需要点击一下控件它才弹出软键盘。重新获得焦点.在板子上试验过就知道。解决方法:子类化QLineEdit。原创 2023-07-13 14:10:47 · 386 阅读 · 0 评论 -
触摸屏tslib库交叉编译在arm上运行进行屏幕校准测试
在tslib的官方github(下面的网址)上选择一个版本下载即可。然后这个库用在Qt上面,需要和Qt源码编译时一起使用。下载完成后,在ubuntu14.04进行解压。配置交叉编译器工具和tslib的编译输出路径。为配置交叉编译后库和可执行文件输出的路径。为配置使用的交叉编译工具的名字。原创 2023-07-13 09:59:08 · 1702 阅读 · 0 评论 -
QTableWidget设置代理 添加QCombox
一、实现功能:向QTableWidget上添加QCombox。显示效果:双击鼠标才显示Combox组件。二、向第二列添加combox代码如下。如下图所示:未双击效果图。三、封装Delegate类。转载 2023-07-08 15:31:00 · 1227 阅读 · 0 评论 -
Qt递归获取指定文件夹下的所有文件
是可以支持一些简单的正则表达式的。就上面的例子(寻找某一个文件下说有以。或者符合这三个任意组合的文件或文件目录条目。返回目录下所有文件(此时没有子文件文件目录),不包括文件链接和. …这个比较强大,可以指明要遍历的文件名,以及遍历的标准和排序功能。返回目录下的所有文件和子文件目录,不包括文件链接和. …大概是说,适合于大目录遍历,支持递归但是不支持排序。返回所有的条目(包括子文件夹下的条目),至少需要指明。只是文档并没有直说的地方(至少我觉得)。默认值,没有标志,迭代器将返回。)结尾的文件还可以这样写。转载 2023-07-06 13:45:59 · 725 阅读 · 0 评论 -
QtWebApp介绍、下载和搭建http轻量级服务器Demo
QtWepApp是一个C++中的HTTP服务器库,其灵感来自Java Servlet。适用于Linux、Windows、Mac OS和Qt Framework支持的许多其他操作系统。QtWebApp包含以下组件:• HTTP(S)1.0和1.1服务器• 模板引擎• 缓冲记录器这些组件可以相互独立地使用。原创 2023-07-05 20:04:10 · 2591 阅读 · 0 评论 -
Qt中文乱码问题解决
1.用预处理命令 #pragma execution_character_set(“utf-8”)将cpp编码设置为utf-8。2.不用保证源码文件是UTF-8,但是源文件中出现中文用QStringLiteral这个宏来包含起来,那么也不会乱码。3. QString::fromLocal8Bit 根据本地文件的编码转成utf-8然后保存到QString中。编辑 -》 select encoding -》 选择UTF-8 -》按编码保存。std::string转QString乱码。原创 2023-06-08 10:54:47 · 1875 阅读 · 0 评论 -
Qt中对TCP粘包的处理
比如此次接收到的长度为100,那么就向后读取100个字节的数据,就是此次的一个包,哪怕此时缓冲区有1000个字节数据,只读这100个字节就能获取一个完整的包,剩余的900个字节就需要下一次去处理,下次处理的时候还是先读包头,读出数据包的一个长度,然后根据这个长度去读取相应的数据,这样一次一次读取就可以一点一点把数据拆分出来了。是的,这个时候数据已经到达客户端了,只不过被保存在客户端的缓存中了(内核缓冲区),客户端只有在read的时候才能读出数据。数据应该在内存,怎么会在网线里面,又没有内存。原创 2023-03-29 13:54:12 · 1218 阅读 · 0 评论 -
Qt使用QPdfium打开和使用PDF操作
QPdfium库下载地址:https://github.com/paulovap/qtpdfium。原创 2023-03-27 00:41:41 · 1000 阅读 · 0 评论 -
Qt基础:九、QAbstractSlider:QScrollBar、QSlider、QDial
tracking设置是否跟踪默认为是,就是在拖动滑块时,每移动一个刻度,都会发射 valueChanged()信号,如果选择否,则只有拖动滑块释放时才发射该信号;orientation 设置部件的方向,有水平和垂直两种选择;invertedControls设置反向控制,比如默认是向上方向键是增大,向下方向键是减小,如果选中这个属性,那么控制就会正好反过来。再来看两个Slider,它们有了自己的两个属性 tickPosition 和tickInterval,前者用来设置显示刻度的位置,默认是不显示刻度;原创 2023-03-23 16:49:28 · 450 阅读 · 0 评论 -
Qt基础:八、 QAbstractSpinBox:QDateTimeEdit,QSpinBox和QDoubleSpinBox
QAbstractSpinBox类是一个抽象基类提供了一个数值设定框和一个行编辑器来显示设定值。它有3个子类QDateTimeEdit,QSpinBox和QDoubleSpinBox,分别用来完成日期时间、整数和浮点数的设定。QSpinBox用来设置整数,QDoubleSpinBox 用来设置浮点数,这两个部件在前面的输入对话框中已经接触过了。从部件栏中找到 Spin Box和 Double Spin Box,并将它们拖人到界面上。可以在属性栏中看到 spinBox的属性有:后缀suffix属性原创 2023-03-23 16:01:43 · 338 阅读 · 0 评论 -
Qt基础:七、QPushButton、QCheckBox.QRadioButton 和 QGroupBox、QLineEdit
按钮部件的基类是QAbstractButton类,提供了按钮的通用功能。QAbstractButton类的子类包括复选框QCheckBox,标准按钮QPushButton,单选框按钮QRadioButton和工具按钮QToolButton。原创 2023-03-23 15:21:33 · 853 阅读 · 0 评论 -
Qt基础:六、标准对话框
getText()函数可以提供一个可输入字符串的对话框,各参数的作用分别是:指定父窗口设置窗口标题、设置对话框中的标签显示文本、设置输人字符串的显示模式(例如密码可以显示成小黑点,这里选择了显示用户输人的实际内容)设置输入框中的默认字符串和设置获取按下按钮信息的bool变量;getInt()函数可以提供一个输入整型数值的对话框,其中的参数 100表示默认的数值是100,-1000表示可输人的最小值是-1000,1000表示可输人的最大值是1000,10表示使用箭头按钮,数值每次变化 10;原创 2023-03-23 10:36:25 · 490 阅读 · 0 评论 -
Qt基础:五、自定义对话框
这个accept()函数是QDialog类中的一个槽,对于一个使用exec()函数实现的模态对话框,执行了这个槽就会隐藏这个模态对话框,并返回QDialog::Accepted 值,这里就是要使用这个值来判断是哪个按钮被按下了。与其对应的还有一个 reject()槽,它可以返回一个QDialog::Rejected值,前面的“退出程序按钮也可以关联这个槽。然后在设计模式中向窗口添加两个Push Button,并且分别更改其显示文本为“进入主界面”和“退出程序”可以在构造函数中设置两个按键的属性。原创 2023-03-22 16:17:29 · 1000 阅读 · 0 评论 -
Qt基础:四、多窗口切换
这是一个测试多窗口切换的程序,点击主界面上得按键,然后弹出一个新的对话框窗口。运行程序,然后单击主界面上的按钮就会弹出一个对话框。1、在主界面添加一个按键。2、实现按键的槽函数。原创 2023-03-22 14:35:43 · 601 阅读 · 0 评论 -
Qt基础:三、模态和非模态对话框
与setModal()函数相似的还有一个setWindowModality()函数,它有一个参数来设置模态对话框要阻塞的窗口类型,可以是Qt::NonModal(不阻塞任何窗口,就是非模态)Qt::WindowModal(阻塞它的父窗口所有祖先窗口以及它们的子窗口)或Qt::ApplicationModal阻塞整个应用程序的所有窗口)。按照运行对话框时是否还可以和该程序的其他窗口进行交互,对话框常被分为两类:模态的(modal 阻塞)和非模态的(modeless 非阻塞)。原创 2023-03-22 14:30:24 · 352 阅读 · 0 评论 -
Qt基础:二、Qt4和Qt5兼容部分
这句话的意思是QT版本超过4,就需要加上widgets。原创 2023-03-22 10:20:21 · 325 阅读 · 0 评论 -
Qt基础:一、设置应用程序图标
Qt基础设置应用程序图标1、创建ico文件,qt的图标用的是ico文件。可以看到此时编译好的exe文件带有了图标。2、在pro文件中添加下面一句。运行的时候也存在了图标。原创 2023-03-22 10:16:32 · 1444 阅读 · 0 评论 -
QScrollArea自动滚动区使用方法
这个时候在右边对象栏中可以看到添加了QScrollArea的对象scrollArea,并且有子对象scorllAreaWidgetContents,这里的scorllAreaWidgetContents就是幕布,当scorllAreaWidgetContents的大小超过了父对象scrollArea时,scrollArea就会自动出现滚动区。这里介绍一种简单的方法,在QtCreator中可以直接在ui中拖出来。这里设置了父对象scrollArea的大小为980*630。此时自动出现了滚动区。原创 2023-03-15 11:44:00 · 1504 阅读 · 1 评论 -
Qt中的一些常用的算法和函数
Qt中的< QtAlgorithms >和< QtGlobal >提供了一些常用的算法和函数。原创 2023-03-08 09:35:15 · 653 阅读 · 0 评论 -
Qt中带符号十进制与两字节十六进制之间的转换
前言:两者转换一般用在串口通信的数据处理上,上位机接收到QByteArray类型的数据,转成QString类型,然后进行字符串截取拼接,获取数据。因此,下文两字节十六进制的数据类型是QString。十进制各种数据类型转换相对简单。下文带符号十进制数据类型是整型。带符号十进制与两字节十六进制之间的转换。1、带符号十进制 转 两字节十六进制。2、两字节十六进制 转 带符号十进制。例子:0xFD67 和 -665。转载 2023-03-08 00:55:30 · 1227 阅读 · 0 评论 -
Qt选择屏幕进行全屏显示
【代码】Qt选择屏幕进行全屏显示。原创 2023-03-06 18:13:35 · 733 阅读 · 0 评论 -
Qt界面最小后恢复界面不能刷新,出现假死的情况
将界面设置成无边框后,再自定义按键使用Qt::WindowMinimized使界面最小化,然后再把界面恢复成正常,发现界面不能刷新;鼠标悬停在控件上,控件的背景颜色不会发生变化;Qt::WA_Mapped的解释是。就是告诉系统界面已经显示出来了;重写showEvent()函数。转载 2023-03-06 17:41:21 · 1351 阅读 · 0 评论 -
Qt实用技巧:Qt并发服务器通讯
2.下载源码可以将客户端的时间间隔改下,同时运行线程数增大,IDE的qDebug可以看到停止后,index没有归零,仔细翻阅调试信息,可以找到“错误”,此条,以便读者自己可以使用源码尝试该问题。服务端:主线程为TcpServer,当有一个新连接的时候,会new一个线程处理该新连接socket,接收数据后发送处理该socket的线程地址。客户端:固定client的线程数量,单个线程按照设置的间隔不断发送数据给服务器,并接收服务器的线程指针地址。newConnection线程处理代码Thread.h。转载 2023-03-02 15:51:02 · 655 阅读 · 0 评论 -
Qt使用信号和槽传递自定义的参数
然而,与创建堆对象的new操作以及删除堆对象的delete操作相比较,信号和槽的代价只是它们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的。方法,将自定义 T 类型的数据保存到QVariant对象中,可以理解为是自定义类型被封装成了QVariant的形式,这样,我们自定义的T类型的对象就能够通过所有参数和返回值为QVarian类型传递。Qt的信号和槽可以传递int、double等c++常用类型变量,也可以传递QVector、QMap等Qt的容器类(当然也可以传递Qt定义的类型)。转载 2023-03-01 10:00:03 · 2553 阅读 · 0 评论