自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(233)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 CAN总线通信原理

CAN总线的仲裁是基于“线与原理(有一个0则为0,全部为1才为1)”,也即,总线上连接多个设备,只要有一个设备输出低电平,那么总线上的电平就为低(这一现象在CAN领域称为“显性”);只有全部设备均输出高电平,总线才能呈现为高电平(称为“隐性”)。可见,只要有一个设备电平显性,那么他就可以覆盖其他所有设备的电平隐性。CAN控制器在发送报文的同时会监听总线状态与自己发送的电平是否一致,如果不一致发生在ID段则会发生仲裁,如果发生在其他区域则会触发相应错误。基于这一原理,如果自己在发送报文时,别的设备也在发送报文

2021-11-15 13:41:06 12154

原创 matlab设置plot绘图刻度的小数位数

以X轴为例set(gca, 'xtick', ts);set(gca,'xTickLabel',num2str(get(gca,'xTick')','%.3f'));%设置为3位小数代码解释:gca为当前plot的坐标框的句柄,set(gca, 'xtick', ts)意思是:设置变量ts为x坐标的内容。set(gca,'xTickLabel', myTick)为把myTick的内容显示在刻度上。那么myTick这个字符串向量从何而来?当然是读取x轴的刻度值get(gca,'xTic

2021-10-21 17:53:35 9520 2

原创 keil/STM32/ARM之分散加载文件scatter file

官方资料:依次打开 -> keil -> help -> uVision help,打开帮助文件,然后定位到分散加载文件章节:分散加载文件有什么用?我们知道,在嵌入式程序中,main函数并不是首先被执行的代码,还有一个隐藏的函数,名字叫__main,他会在main之前被执行,还有一些汇编代码也会在main之前被执行。他们主要干了这些事情:1、设置栈顶地址;2、设置PC指针;3、把0初始化变量所在内存区清0;4、给非0初始化的变量赋值;3、设置栈顶地址。loa.

2021-09-02 11:29:52 4259 2

原创 QT如何修改[设计师界面类]的名称(窗口或控件名字)?

当使用向导创建设计师界面类以后,如下图所示:这样QT会为我们生成3个文件:.cpp、.hpp、.ui。但是修改这个类名,就有点麻烦了,稍有不慎,就会编译报出一些莫名其妙的错误。要修改的地方有这么几个:1、右击.ui文件,重命名为新名称2、右击.ui文件,选择用文本编辑器打开,把旧名称查找替换为新名称3、右击.cpp,.h文件,重命名为新名称4、使用全字匹配查找替换cpp、h文件中类的旧名称,并替换5、修改.h文件中形如 #include "ui_xxx.h"中的xxx为.

2021-07-21 09:38:26 6597

原创 QT样式表qss设置后无效的原因大全

设置样式表无非两种方式,1是直接在ui设计师界面填写,这样所见即所得,2是用代码setStylesheet。不过令人困惑的是,经常设置了样式表之后,运行出的结果与预期不符,总结可能有以下原因:1、子控件如果设置了样式表,那么他会把从父控件送来的【同选择器】下的样式表覆盖。注:【样式表选择器】是专业术语,请自行搜索学习。2、子类如果设置了样式表,那么从父类继承来的【同选择器】下的样式表覆盖。注:子类和子控件不是一个概念。子控件是QWidget的树状关系。3、子类化QWidget后的类,

2021-06-25 10:50:52 13180

原创 QML系列教程(10)-行布局、列布局、网格布局、流布局

行布局 Row{ }、列布局 Column{ }、网格布局 Grid{ }、流布局 Flow{ }。QML中的布局和QWidget中的布局用法一样,可以实现任意元素的规律排列。

2021-06-10 17:59:45 3791

原创 QML系列教程(9)-状态过渡Transitions

过渡Transitions 必须配合状态State才能使用,见前一篇博文。所谓过渡,就是在已经定义好的两个state之间,做平滑的转场动画。这些动画可以是位移动画、颜色渐变动画、旋转动画等等任意QML支持的动画(见)...

2021-06-09 18:25:15 606

原创 QML系列教程(8)-状态State+属性变化PropertyChanges+when的用法

所谓状态State,就是指界面上某一时刻某些元素的属性值集合。我们可以定义多种状态,并控制何时使用这个状态。应用实例:界面上有一个按钮,当点它一次后

2021-06-08 09:19:55 2511 1

原创 QML系列教程(7)-缓冲曲线easing+平抛运动+反弹运动

缓冲曲线的作用是,控制数值变化过程中的速度。例如,同样是让一个方块的x坐标从0移动到100,我们可以让他匀速运动过去,也可以让他先快后慢运动过去,也可以让他先慢后快的

2021-06-03 18:41:58 1213

原创 QML系列教程(6)-平行动画ParallelAnimation+序列动画SequentialAnimation

所谓平行动画,就是同时播放多个动画;所谓序列动画,就是依次播放多个动画;先看一个平行动画的例子,让一个矩形的x坐标从0 -> 100, y坐标也从0到100

2021-06-03 18:04:00 878

原创 QML系列教程(5)-属性动画的3种写法

属性值动画PropertyAnimation,一个最经典的例子是数值动画 NumberAnimation,方法1:NumberAnimation on [属性名] P{}NumberAnimation on rotation { id: minutePinAni; from: 0; to: 360; duration: 20000; loops: Animation.Infinite

2021-06-03 17:03:27 1145

原创 QML系列教程(4)-自定义按钮 + 自定义信号槽

自定义组件,也叫自定义元素。这一操作的作用,类似于C++的自定义类,就好比,如果你嫌弃QPushButton不够强大,那么你就可以继承它并写出一个子类来实现一个功能更强的按钮,如果你还不满意,你甚至可以继承QW...

2021-06-03 15:46:28 1829

原创 QML系列教程(3)-动画Animation、属性动画PropertyAnimation

QML中有很多类型的动画,他们的公共父类为:Animation

2021-06-03 11:12:25 732

原创 QML系列教程(2)-载入显示一幅或多幅图片

import QtQuick 2.0Item { id: root width: 200 height: width Image{ id: background anchors.fill: parent; source: "qrc:/pic/pic/meter.jpg" }}

2021-06-02 17:25:13 1810 1

原创 QML系列教程(1)-概念

QML通过一堆嵌套的元素,来描述一个界面,以及界面上的动作。其语法的组织方式,类似树状结构。所谓元素,又分成两种类型:可见元素(如矩形框、文本输入框等),不可见元素(如)

2021-06-02 16:32:01 456 1

原创 qt与javascript交互数据

1、QT向JS传递数组基本类型可以直接传递,例如 int bool string double等qt向js传递数组,需要把数组转成QJsonArray,再把QJsonArray转成QString, 这样js就会接收到一个基本类型string,而这个string在js中直接就是一个标准的js数组。QT代码示例:调用js函数,并给这个js函数传递一个数组作为参数 //方法1:构造QJsonArray,然后转成QString QJsonArray ja; ja <&l

2021-05-24 13:16:07 4535 6

原创 QT生成和使用静态链接库

目录1、生成静态链接库2、使用静态链接库生成静态链接库,目的有两个:1、加快编译速度,也即:库文件被加入到工程中,无需再次编译,编译器只编译你写的c/cpp,然后与加进来的库进行连接,以生成可执行文件;2、隐藏自己的代码,也即,只给客户提供库文件和h/hpp文件,具体实现全部隐藏在库中。所谓静态库,指的是,可以在编译时,提供代码链接资源的文件,静态库中的功能,会被直接编译到可执行文件中,这样可执行文件在运行时,无需额外依赖这个库。而动态库,需要在运行时,添加到可执行文件路径下,如一大堆dll

2021-03-15 18:21:18 3592

原创 QT模型视图MVC系列教程(7)---自定义视图

1、概念对于同一个MODEL,我们可以将其展示为不同的界面。例如:QFileSystemModel *fModel = new QFileSystemModel(); fModel->setRootPath("C:\"); QTreeView *treeView = new QTreeView(); treeView->setModel(fModel); treeView->show(); QTableView *tableView

2021-02-28 10:39:23 1209 2

原创 QPainter、QPen、QBrush,绘图、填充、渐变等使用方法

QPen是画笔,用来绘制图形的轮廓线,以及定义轮廓线的颜色、样式和属性;QBrush是画刷,用来填充封闭图形,以及定义填充的颜色、样式和属性;QPainter是画家,他要使用画笔QPen和画刷QBrush,在画布(QPaintDevice)上画文字、图形、图片等。可以充当画布(QPaintDevice)的类(其子类)有:QWidget,QImage, QOpenGLPaintDevice, QPagedPaintDevice, QPaintDeviceWindow, QPicture, and Q.

2021-02-24 16:19:46 10529 1

原创 QT窗口:透明与半透明、不规则异形窗口、控件透明与半透明、不规则异形按钮

目录1、主窗口全透明2、主窗口半透明(以白里透红为例)1、主窗口全透明直接在UI的主窗口中,拖出几个控件,下图我放置了一个QPushButton按钮、QCheckBox复选框、设置了蓝色背景的QWidget。然后用代码设置主窗体的透明:MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);

2021-02-23 18:57:02 8609 5

原创 altium designer芯片引脚间距规则过小

AD中芯片的引脚间距过小,违反了默认间距规则(如上图所示的16mil),而触发绿色的报错,但是我们又不能因噎废食,而把整个PCB规则间距改大。因此最好的解决方案是,只修改这一个芯片的间距规则依次点击:设计->规则->新建规则,如下图所示:然后修改新规则的名称为你想要的名称,我修改改为了:chip pin。然后按下图步骤设置这条规则的适用范围为:与某个封装相连的。例如我这里设置的是,所有与LQFP144N(这是个MCU)相连的。如果还有其他芯片引脚间距过小也报错,那......

2021-02-14 18:26:38 39269 8

原创 QT模型视图MVC系列教程(6)---自定义委托Delegate保持显示

以下内容,不再区分这3个词:Delegate 代理 委托。假设有这样一个场景,你已经使用QComboBox为表格View中的某一列数值进行了代理,当用户双击单元格时,这个下拉列表才会出现,一旦用户选择完成,这个comboBox就会被隐藏起来,只在该单元格上显示一个文字。如果你想让这个下拉列表一直保持显示该怎么办?再举一个场景:你已经使用了QSpinBox为某一列的数字做代理,只有用户双击该单元格时,这个Spinbox的上下箭头才会出现,一旦用户选择完成,这个Spinbox就会被隐藏起来,只在该单元格

2021-02-04 18:12:37 3164 8

原创 QT模型视图MVC系列教程(5)---自定义委托Delegate编辑时显示

委托的作用是让程序员实现视图中内容的自定义展示方式和编辑方式。下面列举几个场景,这些场景适合用委托:(1)表格中要显示或编辑一列日期,默认的表格的单元格的输入框都是类似QLineEdit的一个小控件,程序员想要监控用户输入的合法性,实现起来较为繁琐。类似场景还有:某一列单元格只允许输入[1,120]之间的正整数,等等。(2)表格中有一列内容是学生的成绩,为了便于观察成绩的分布,用户希望把成绩大小展现为进度条样式,如果学生的成绩低于60分,则显示为红色。以上场景就是涉及到了单元格内容的展示

2021-02-03 16:12:29 3229 5

原创 QT模型视图MVC系列教程(4)---角色role的使用(Qt::DisplayRole 类型)

模型正在维护的数据,不仅是视图中所看到的那些,还有很多数据在视图是被隐藏的,你看不到,不代表他没有,比如,一个列表视图中,不仅会显示文字,文字前可能还会显示一个图标。其实,每一个条目,所包含的内容,不仅有文字、图标,还有很多,到底有哪些呢,看一下枚举Qt::DisplayRole 就知道了,在QT5.10中,有22个,以后随着QT版本更新,这个值可能会变化。当视图View向模型Model索要数据时,不仅要提供索引 index,还必须要提供角色role。index和role共同决定出视图到底在向Mod

2021-02-02 19:22:41 12048 5

原创 QT模型视图MVC系列教程(1)--概念解析与官方资料

在QT官方帮助文档中搜索:Model,找到:Model/View Programming 以及Model/View Tutorial 系列教程,当然看起来有些费劲,但却是最权威的资料。0、MV架构该文章来自【暴躁的野生猿】博客,如有非法转载,请读者帮忙举报下。MVC指的是Model、View、Control,模型视图控制三者分离的一种数据与用户交互的方式。Qt本质上实现的是MV结构,没有Control,其实MV架构已经足以应付大多数应用场景了。其优势是把数据的存储方式和视图的展示方式,.

2021-02-02 18:09:00 1993 3

原创 QT模型视图MVC系列教程(3)---自定义模型,以QAbstractTableModel为例

MVC中的M就是模型Model,QT中所有的模型都继承自:QAbstractItemModel查阅手册可知,它的子类有3个:分别是列表模型、代理模型、表格模型。要实现自定义模型,可以继承QAbstractItemModel以及任何一个后代类(含子类、孙子类。。。等),按照QT的设计管理,名字里带抽象字样Abstract的类,都不能直接使用,必须继承并自行实现某些特定函数;对于QT自带的不带Abstract字样的Model类,可以不用继承重写,直接new出来使用即可,这种情形较为简单。所以本文

2021-02-02 11:59:12 2457

原创 QT模型视图MVC系列教程(2)-模型数据索引QModelIndex详解

从名字可以看出,他是模型的索引,只要对模型实体(各种xxxModel的实体)施加这个索引,model就会返回数据集中对应的值,或者通过这个索引修改对应数据集中的值。类比数组就更好理解了,charbuf[8] = {'a', 'b','c','d','e'}; 给定索引3,我们就能从数据集合中读出该值为'c',或者任意修改数据集中的第3个值的值。、...

2021-02-01 17:51:09 9467 6

原创 QT UDP组播与广播

一、组播编程步骤1、接收方(1) new一个UDP socket对象(2)把socket bind到指定的IP: 端口号,因为本机会有多个IP,我们选择到底把哪个IP加入组播,如果想把本机所有的IP都加入组播,可bind这个IP:QHostAddress::AnyIPv4。(3)加入到组播IP,函数为 joinMulticastGroup(4)可随时退出该组播IP,函数为leaveMulticastGroup2、发送方与点对点的UDP编程步骤完全相同,不同之处只有一点:目标.

2021-01-29 19:42:07 3635 1

原创 GPS模块配置步骤u-center/GNSS-Viewer使用方法

附件:ublox M8系列的协议手册:《u-blox 8 / u-blox M8 Receiver description Including protocol specification》该手册详细介绍了NEMA协议,ublox协议,这两种报文的详细描述,写代码时会用到。所谓GPS模块的配置,其实就是,配置让它输出哪些报文、配置报文的输出频率、波特率等。u-center软件可以配置ublox厂家的gps模块,GNSS-Viewer软件可用于配置skytrap厂家的GPS模块。...

2021-01-26 10:25:35 13848 10

原创 STM32外部中断EXIT使用步骤与注意事项

先记录几个知识点:1、STM32的任何一个引脚均可配置成外部中断。2、PA0/PB0/PC0...等均可任选一个连接到中断线0,PA3/PB2/PC3.....等均可任何一个连接到中断线3。。。。其余pin同理3、EXTI_Line8的中断服务函数是EXTI9_5_IRQHandler,也即这个服务函数要对[5,9]这5个中断线进行服务,如何判断到底是哪个中断线引发的中断,以8号线为例,可通过这条语句查询:if(EXTI_GetITStatus(EXTI_Line8) != RESET).

2021-01-13 15:51:31 2081

原创 STM32/keil把多个c文件编译为静态库lib

众所周知,编译lib的目的无非两个:加速编译、隐藏代码。一个常见的应用场景就是,把ST的标准库或HAL库等编译成lib,这样以后再编译整个工程时,就无需再次编译他们了,可以节省编译时间。当然,坏处是,无法右键1、把打算编译成lib的多个c文件放到同一个group。你也可以不把这些c文件放到同一个lib,这不影响后续步骤。放到同一个group的目的是,仅仅是方便后续操作而已。如下图,我们可以新建一个group。2、编译项目,保证项目可以编过(最好是0 warning 0 error).

2021-01-05 10:28:20 5740 2

原创 matlab一个m文件调用另一个m文件中的多个函数

一般都是每个函数独占一个m文件,而且函数名与文件名必须相同。这条规则很难受,就不能像C语言那样,把多个函数写在一个m文件里,供别的m文件调用吗目前找到了2种方法,第一种使用函数句柄,也就是函数指针,第二种使用类的静态函数:方法1:方法2:classdef FcCommon < handle properties 静态成员变量 %列向量 end methods %普通函数块--开始

2020-12-22 11:58:09 15296

原创 STM32开启浮点运算单元FPU与DSP运算库,附性能测试

STM32F4xx属于Cortex M4F架构,自带FPU硬件,可以加速float类型数据的加减乘除运算。观察启动文件,发现,要启用FPU,需要启动满足两个宏:(__FPU_PRESENT == 1) && (__FPU_USED == 1)在keil的魔术棒中,如上图所示,直接选中单精度浮点运算器,keil就会自动把所需的宏给定义出来。如何验证是否开启成功?验证方法1:我们把F407主频设为168M,不选中/选中FPU,分别做10万次乘法:发现耗时分别为32..

2020-11-27 10:19:26 14302 1

原创 单片机中断防护概述

主优先级相同的中断,相当于同处一个线程,main链条是优先级最低的线程,如果把中断分组设置为共4个主优先级,那么加上main,整个程序共有5个线程,优先级由高到低依次为:int0 int 1 int2 in3 main同级别的中断,对同一个变量的操作,永远不会发生读写一半被改掉的情况,如同main链中的各个函数一样,属于同步操作。当多线程异步操作同一个变量时,中断(线程)防护需要面临的情景:高优先级[读],低优先级[读写]异常:低优先级把变量写了一半,被高优先级给读到,低优先级必须..

2020-11-26 12:38:03 1045

原创 STM32-CAN转TTL串口-使用详解,以F407为例

情况是这样的,因为项目中需要外接的串口设备很多,STM32F4的6个UART/USART已经都被占用完了,如果想继续接入串口设备,只能通过【can<->串口】转换模块来实现,而且由于can总线支持N多can节点,理论上,STM32就可以接入100多个串口设备了。但是,只使用一个【can<->串口】模块,是无法使串口设备与STM32通信的,因为单片机都是TTL电平(0~3.3或5V),是无法与can总线(差分电平2.3V)通信的,所以必须有一个模块能够把单片机发出的信号转换为CAN

2020-10-22 10:40:48 9022 5

原创 已知三点求圆心和半径

https://blog.csdn.net/youhuakongzhi/article/details/86474619https://blog.csdn.net/qq_43572555/article/details/103470968很简单的推导,以后用的时候就不用浪费时间了,圆的一般方程为:三个已知点为(x1,y1) (x2,y2) (x3,y3)则圆心和半径为:需要注意,如果三个点共线,那么这三个点肯定无法形成圆,这一问题可通过上式的A来判定,A=0说明三点共线...

2020-10-11 20:20:32 17853 5

原创 opencv遍历像素点最快的方法,14种选1

对于uint8类型3通道图像,不论是BGR还是HSV,这种图像在内存的排序方式就是(BGR为蓝绿红):BGRBGRBGR.....BGRBGRBGR.....BGRBGRBGR....................................对于uint8类型的单通道灰度图,排序方式就是最简单的二维数组(Y代表灰度值):YYYYYY.............YYYYYY.............YYYYYY.....................................

2020-10-11 11:09:03 3836 1

原创 qt文本转语音tts的使用方法,QTextToSpeech

这个功能已经被qt封装好了,在不同的操作系上封装了不同的方法。在win7上,qt调用的是微软讲述者(microsoft speech),这个功能在原版win中是自带的,在ghost或者阉割版win中是没有的。需要自己安装。在安装之前,先验证一下你的系统是否可用这个功能:如上图所示,打开控制面板-->文本到语音设置-->语言选择-->预听语音。如果能够正常朗读中文文字,那就说明你的电脑的TTS功能是正常的。如果不能没有声音,或者直接报错,你就必须得重新安装TTS。需要安装:

2020-09-28 14:09:37 6306 8

原创 C语言与javascript(也即js)的区别、JS局部静态变量的实现等

对于有C基础的同学来说,学js是相当简单的,语法类似,这里主要列一下两者的异同,基本上记住了这些异同点,就可以使用js了。不过C是编译性语言,js是解释性语言,差别还是不小的。1、js中的变量赋值时,除了基本类型以外,都是赋引用。2、两者都有回调函数的概念,而且函数名就是回调变量名...

2020-09-05 16:17:07 2225

原创 solidworks导出obj模型和mtl材质

目录0、使用STL格式中转1、使用solidworks宏2、使用opencascade软件+step格式中转为何会有这种需求?因为大多数3D库,都支持导入obj模型和mtl材质,例如webGL、qt3D等,而我只会用solidworks进行三维建模,没有obj和mtl,程序写不下去了。。还有就是有人要把solidworks的模型,弄到三维渲染软件里进行渲染,某些渲染软件与solidworks兼容的格式只有obj。。经过一番调研,终于找到了方法。0、使用STL格式中转从网.

2020-09-04 17:01:54 15334 15

Free SolidWorks OBJ Exporter v2.zip

solidworks自定义宏,可以把solidworks模型转换为obj和mtl格式,教程:https://blog.csdn.net/qq_31073871/article/details/108407272

2021-10-09

3drradioconfig.zip

使用方法:https://blog.csdn.net/qq_31073871/article/details/103700835#comments_15477606

2021-03-18

QT多复选框.zip

QT5.8编译通过,相关介绍请搜索我的博客《QT使用QListWidget+QChececkBox实现多选功能》,链接https://blog.csdn.net/qq_31073871/article/details/90272780

2019-05-18

AU3自动发送163邮件

实现了AU3自动后台静默发送163邮件!可以用来干坏事!

2015-09-05

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除