![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Qt
雲烟
可以卑微如尘土,不可扭曲如蛆虫。
展开
-
Qt 屏幕偶发性失灵
基于NXP i.mx7的Qt应用层项目开发,通过goodix使用触摸屏,走i2c协议。原创 2023-08-15 10:09:04 · 1474 阅读 · 0 评论 -
Qt 信号槽连接方式
Qt中信号槽是核心功能,但是一定要正确使用,并且要摒弃文章靠头示例中的老式写法,使用新式写法进行使用,这样在编译阶段就会进行检查,避免调试困难。原创 2023-08-23 18:03:25 · 1019 阅读 · 0 评论 -
Qt 耗时任务界面阻塞
背景:主界面免不了进行一些耗时操作,如果界面和是数据处理本身就处于同一个线程,那么使用QCoreApplication::processEvents()是无效的。如果不需要返回值,那么扔进线程池运行就好,使用QObject::moveToThread()。但是需要返回值的时候就会有问题。解决办法:使用QEventLoop和QtConcurrent:run()。原创 2022-10-19 18:08:31 · 1599 阅读 · 0 评论 -
Qt控件设置多个快捷键
通过setShortcut()设置多个快捷键时,只有最后一个设置会生效。原创 2022-07-05 16:49:22 · 2107 阅读 · 0 评论 -
qtCreator 项目栏不显示git信息
问题:Ubuntu升级后,发现再打开qt,项目栏没办法显示git的分支信息。但是用命令行使用git还一切正常,并没有什么错误。原因:git也同时更新了版本,修复了之前的问题,使用命令添加该文件夹即可。或者干脆添加所有文件为安全的:注意:一定要使用该文件所属的管理员去添加才有效,A工程所属root,必须使用root账户添加,使用当前账号添加无效。...原创 2022-06-10 18:44:04 · 525 阅读 · 0 评论 -
Qt 串口使用
其中,/dev/ttyACM0"是虚拟串口设备,真实串口更改对应的端口号及设置。Qt串口所属文件“qextserilport.h”原创 2023-08-15 11:30:13 · 164 阅读 · 0 评论 -
计算函数耗时
简单计算某个函数在当前设备的运行耗时。clock():捕捉从程序开始运行到clock()被调用时所耗费的时间。时间单位是clock tick(时钟点)。CLK_TCK:本机机器时钟每秒所走的时钟打点数。duration:以秒为单位的计算结果。#include<QTime> //c <time.h>clock_t begin,end;double duration;begin = clock();function();end = clock();dura原创 2022-04-30 16:19:48 · 580 阅读 · 0 评论 -
Qt 使用Svg图标
SVG全称Scalable Vector Graphics,即可缩放矢量图。优点:基于XML。 采用文本来描述对象。 具有交互性和动态性。 完全支持DOM。 文件小。 任意缩放不破坏图像的清晰度。 图像中的文字独立于图像,没有字体限制。目标:使用QSvg、QSvgRender等显示一张SVG图像,并进行缩放验证其清晰度。代码主体结构:main.cpp创建SVGTest 。 SVGtest.cpp构造函数设置标题、创建菜单、创建svgWindow、设置svgWindow为主原创 2022-04-14 20:46:46 · 1786 阅读 · 0 评论 -
Qt 程序启动动画
背景:Qt应用处理任务复杂,开机后要等待很久黑屏才能走到界面循环,为了去除黑屏的状态,这段时间嵌入一张图片过渡。Qt官方倡导使用QSplashScreen类,用法如下:Main函数启动界面动画的后面(QApplication a(argc,argv);之后)嵌入以下代码:QPixmap pix(":/test/test.png");QSplashScreen spl(pix);spl.show();a.processEvents();主窗体创建后关闭这个图片显示:MainW原创 2022-04-08 18:05:19 · 1172 阅读 · 0 评论 -
Qt QLayout
Qt提供了水平排列QHBoxLayout类、垂直排列QVBoxLayout类、网格排列QGridLayout类以及多页面排列QStackedLayout类。他们之间的关系如图:addWidget():用于需要加入布局的控件,参数如下QWidhet *widget:需要插入的控件 int fromRow:插入的行 int fromColumn:插入的列 int rowSpan:占用的行数 int columnSpan:占用的列数 Qt::Alignment alignment=0:描述各原创 2022-04-07 21:53:45 · 858 阅读 · 0 评论 -
Qt QString使用
QString常用方法原创 2022-04-06 20:09:43 · 1439 阅读 · 0 评论 -
Qt程序Linux异常退出时查找问题
背景:Qt程序偶发性crash,偶发性原因不好查找,可以配合GDB查看coredump文件进行调试,找出发生异常的地方,但是Qt自带库有时无法查找。程序运行前的准备,设置几个步骤,在程序crash时生成对应的coredump文件:shell中执行“echo 0 > /proc/sys/kernel/core_uses_pid”,用以控制生成的coredump文件名后缀格式,echo 1表示添加pid作为后缀,echo 0表示不添加pid作为后缀,保持coredump文件名。 shell中执行原创 2022-03-30 14:42:27 · 2585 阅读 · 0 评论 -
Data Matrix of Zint
Zint是一个开源生成二维码的封装库,常见的二维码和条形码都可以生成。zint.h/* zint.h - definitions for libzint libzint - the open source barcode library Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com> Redistribution and use in source and binary forms,原创 2022-01-04 12:00:41 · 575 阅读 · 3 评论 -
Qt 图片缩放、移动、旋转
背景:待输出图片需要在APP中做二次编辑,放大旋转等。办法:使用QMatrix类,该类提供了二维转换功能。缩放:QMatrix martix;martix.scale(2,2);//放大2倍matrix.scale(0.5,0.5);//缩小2倍image = image.transformed(matrix);旋转:QMatrix martix;martix.rotate(90);image = image.transformed(matrix);镜像:im原创 2021-09-18 10:35:34 · 896 阅读 · 0 评论 -
Qt 设置启动画面
背景:PC端主界面加载时间较长,使用加载画面过度加载过程。办法:在mian中添加一个启动动画。main.cpp#include <QApplication>#include <QPixmap>#include <QSplashScreen>int main(int argc, char *argv[]){ QApplication a(argc, argv); QPixmap pixmap(":/img/myImage/dddd.p原创 2021-09-16 16:41:16 · 416 阅读 · 0 评论 -
Qt 体温计/温度计 插件
背景,首先要有一张背景图片,并且知道该图片的长宽高等信息。例如:该模型宽56,高200,刻度高130。.h原创 2021-09-08 17:27:10 · 689 阅读 · 0 评论 -
Qt 调整图标颜色
问题:使用图标库中的图标,是统一的黑色,但是我想使用白色,怎么设置?首先:自写一个QLabel类。.hclass ColorIcon:public QLabel{ Q_OBJECT Q_PROPERTY(QColor color WRITE setColor READ getColor DESIGNABLE true )public: explicit ColorIcon(QWidget *parent=nullptr); QColor getColo..原创 2021-09-08 10:31:08 · 1588 阅读 · 0 评论 -
Qt自定义dialog形状
背景:自写一个MyDialog,继承自Dialog,想要改变MyDialog的样式为圆角或者圆形,改样式表等都不生效,放在QFrame中虽然可行,但是着色又会有问题。解决办法: 在MyDialog的构造函数中重绘样式。 setWindowFlags( Qt::Dialog | Qt::FramelessWindowHint ); QBitmap bmp( this->size() ); bmp.fill(); QPainte...原创 2021-08-25 15:02:14 · 568 阅读 · 0 评论 -
Qt窗口设置
设置无边框setWindowFlags(Qt::Window | Qt::FramelessWindowHint);设置透明setAttribute(Qt::WA_TranslucentBackground);设置自动填充背景setAutoFillBackground(true);设置窗口随鼠标移动void CCMyDialog::mouseMoveEvent(QMouseEvent *event){ if(event->buttons() & Q原创 2021-08-18 10:21:15 · 111 阅读 · 0 评论 -
Qt 搭建类似mainwindow框架
不使用官方的mainwindow等,自己新建一个类似主界面。.h:主要使用绘画及鼠标事件。class CcWindowWidget : public QWidget{ Q_OBJECTpublic: explicit CcWindowWidget(QWidget *parent = nullptr); virtual ~CcWindowWidget();protected: void paintEvent(QPaintEvent *event); v原创 2021-07-21 18:03:09 · 210 阅读 · 0 评论 -
Qt 手绘按键三部曲
第一步:包含相应头文件及声明。#include<QPushButton>private: QPushButton * m_pTestBtn = nullptr;第二步:长宽,摆放位置,样式等具体实现。 #define BUTTON_STARTX 122 #define BUTTON_STARTY 221 #define BUTTON_WIDTH 55 #define BUTTON_HEIGHT 55 m_pTes原创 2021-07-20 18:25:03 · 160 阅读 · 0 评论 -
Qt 绘制拖动刻度尺
本着一切皆可painter的原则,绘制一个拖动改变的刻度尺。首先,鼠标事件中,获取鼠标拖动的坐标。void StrechRuler::mouseMoveEvent(QMouseEvent *event){ if((150 <= event->pos().x()) && (event->pos().x()<= 650)){ curPositionX = event->pos().x()-150; qDebug()原创 2021-07-20 18:07:07 · 2571 阅读 · 0 评论 -
Qt 绘制背景
Qt设置背景时,一般使用painter来绘制,具体步骤如下。.h加入painter事件protected: void paintEvent(QPaintEvent *event);.cpp中实现绘制void cWidget::paintEvent(QPaintEvent * event){ QPainter painter(this); painter.save(); painter.drawPixmap(rect(), QPixmap(":/img/b原创 2021-07-20 18:06:19 · 1389 阅读 · 0 评论 -
Qt inherits
inherits()方法可以判断该控件是否是某个类的子类。 QPushButton *btn = new QPushButton; qDebug()<<"btn is inherits QAbstractButton? "<<btn->inherits("QAbstractButton"); qDebug()<<"btn is inherits QWidget?"<<btn->inherits("QWidget");原创 2021-07-15 18:44:24 · 848 阅读 · 0 评论 -
Qt 控件设置文本
有三种方法,以Label为例: QLabel * lbl_1 = new QLabel(this); QLabel * lbl_2 = new QLabel(this); QLabel * lbl_3 = new QLabel(this); lbl_2->move(100,100); lbl_3->move(200,200); lbl_1->setText("This is label 1"); lbl_2->setSt原创 2021-07-15 18:43:25 · 582 阅读 · 0 评论 -
Qt 同插件不同布局效果
背景:相同的插件,因为布局使用的不同,呈现不同的效果。例如:使用插件文本输入框设置布局,然后将按键放入该布局,就呈现了完全不一样的效果。 QPushButton *btn = new QPushButton; btn->resize(30,ui->lineEdit->height()); QHBoxLayout *layout = new QHBoxLayout(ui->lineEdit); layout->setMargin(0);原创 2021-07-15 18:45:19 · 120 阅读 · 0 评论 -
Qt 自带图标
Qt自带了一些基本图标,是可以直接用的,封装再QStyle类中,大约有80个左右,常用的开发基本可以满足。 QStyle::SP_ArrowBack QStyle::SP_DriveCDIcon QStyle::SP_ComputerIcon QStyle::SP_DesktopIcon QStyle::SP_DialogApplyButton QStyle::SP_DialogCancelButton QStyle::SP_DialogCloseB原创 2021-07-15 18:46:28 · 3425 阅读 · 0 评论 -
Qt定时执行一次任务
想要执行一次定时任务,可直接使用以下方式:QTimer::singleShot( 3000, [this]() { function();} );继承自当前进程,3秒后执行一次function()。原创 2021-06-02 19:49:07 · 1745 阅读 · 0 评论 -
Qt label循环赋值
背景:Qt界面上有多个label或者lineedit,将一组数据分别赋值给不同的label,原来使用ui->label->setText(),感觉笨拙而反锁,稍微不注意甚至数据错误。解决办法:首先label的名字要保持顺序排列,ui中找label时就可以用循环找到,代码如下:假设要赋值给label数据如下: struct testInfo{ uint8_t id[8]; uint8_t cmd; };实现如下: for原创 2021-05-25 19:47:31 · 2234 阅读 · 1 评论 -
Qt dialog弹出后键盘卡死
问题:使用dialog中的输入框编辑,发现软键盘虽然弹出,但是按键无反应。(不止键盘,别的部件也会有此问题)原因:dialog使用了exec(),阻塞了别的部件。解决办法:exec()前更改dialog模式。 MyDialog msg(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,this); msg.setWindowModality(Qt::WindowModal); if(msg.exec() == BaseDial原创 2021-05-25 14:15:01 · 893 阅读 · 3 评论 -
Qt层叠部件屏蔽鼠标消息
背景:Qt使用中,一个widget部件中有很多个label、button等部件,但是只想要widget大部件获取鼠标响应,而别的不响应。方法: QList<QLabel *> allLabel = this->findChildren<QLabel *>(); foreach(QLabel *lbl ,allLabel){ lbl->setAttribute(Qt::WA_TransparentForMouseEvents, true)原创 2020-12-01 19:16:33 · 571 阅读 · 1 评论 -
Qt QPalette测试
效果:.h#ifndef PALETTE_H#define PALETTE_H#include <QDialog>#include <QComboBox>#include <QLabel>#include <QTextEdit>#include <QPushButton>#include <QLineEdit>QT_BEGIN_NAMESPACEnamespace Ui { class Palette原创 2020-11-26 16:05:15 · 168 阅读 · 0 评论 -
Qt点击唤醒影藏应用
背景:之前实现了应用程序最小化,且防止多开。但是会出现一个bug,点击应用图标后,影藏的app无反应。继续完善,实现图标影藏后,再次点击图标唤醒已影藏应用。.h#ifndef SINGLEAPPLICATION_H#define SINGLEAPPLICATION_H#include <QApplication>#include <QObject>#include <QWidget>#include <QtNetwork/QLocalServer原创 2020-10-27 13:44:40 · 209 阅读 · 0 评论 -
Qt编译提速
背景:编译大型项目文件时,速度较慢,此前已经使用参数-J3使用3个CPU进行编程,但是效果一般,编译速度依旧很慢。解决方法:使用ccache,是一个编译器缓存,ccache并不是真正去读取、理解并解释其内容,只是将最终的文本拷贝到文件中,使得它可以立即被编译。步骤:下载安装ccache,sudo apt-get install ccache ccache -M 6G ,划分6G空间给ccache使用。 Qt中配置使用,如图。结果:第一次编译未见效果,第二次便速度飞起。...原创 2020-10-11 14:31:43 · 382 阅读 · 0 评论 -
Qt 发送事件
QCoreApplication类中有两个事件发送函数,用于发送指定事件。bool QCoreApplication::sendEvent(QObject * receiver, QEvent * event)void QCoreApplication::postEvent(QObject * reciver, QEvent * event, int priority = Qt::NormalEventPriority)sendEvent()会立即处理给定事件,QEvent对象参数再事件发送原创 2020-09-29 09:46:20 · 1108 阅读 · 0 评论 -
Qt 随机数使用
Qt中的随机数是通过qrand()和qsrand()两个函数实现的。使用步骤:使用qsrande()函数设置初值,如果不设置初值也可以使用,只是每次重新运行程序会产生一组相同的随机数。 调用qrand()获取随机数。 secsTo()表示两个时间点之间包含的秒数。 获取一个范围内的数值,使这个数与这个整数取余,例如获取0~600直接的数:%600。eg. qsrand(QTimer(0,0,0).secsTo(QTime::currentTime())); int rand原创 2020-09-29 09:26:19 · 1776 阅读 · 0 评论 -
Qt 鼠标事件和滚轮事件
QMouseEvent类表示一个鼠标事件,窗口中的按下,移动都会产生鼠标事件。QWheelEvent用来表示滚轮事件,获取滚轮的移动方向和距离。本案例效果:在文本框与框外鼠标样式改变,双击全屏,右击样式改变滑轮缩放文本框内内容。.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEcl原创 2020-09-28 18:21:24 · 1119 阅读 · 0 评论 -
Qt 事件传递方向
Qt的事件传递方向:先传递给获得焦点的部件,只有在此部件忽略掉了该事件,才会传递给这个部件的父部件。重新实现事件处理函数的时候,要调用父类的相应事件处理函数来实现默认操作。 例如在widget上构造一个自己的lineedit部件,只有当lineedit部件忽略掉了这个事件后,父部件才能捕获,并且这个部件继承自QLineEdit,如果不执行QLineEdit类的默认事件处理函数keyPressEvent(event),那么这个部件将无法输入。void MyLineEdit:...原创 2020-09-28 18:22:07 · 932 阅读 · 1 评论 -
Qt LineEdit自动补全
利用QCompleter类可以实现输入的自动补全。 QStringList TestList; TestList << "Qt" << "Qt Creator" << "Qt Linguist" ; QCompleter *completer = new QCompleter(TestList, this); completer->setCaseSensitivity(Qt::CaseInsensitive);//不分大小写原创 2020-09-27 17:23:40 · 390 阅读 · 0 评论 -
Qt Debug版本改Release
Debug版本包含了众多的调试信息,用于工程调试使用。产品交付时,多为release版本,此版本能够影藏调试信息,且程序较小。界面修改 工程设置界面Build Step里的qmake build configuration中选择Release。Shell修改 qmake时添加参数"-CONFIG+=Release"。工具链修改 假设已有Debug版本名为test的APP,使用指令arm-linux-gnueabihf-strip test即可,会抽掉所...原创 2020-09-22 11:17:08 · 880 阅读 · 0 评论