你永远不知道的那些骚操作(Coding纪实)

一个简单的两点间的连线的概念,实际上常规的公式计算的是长度信息,在一幅图片里面由于采用的是像素的概念,这里就需要有一个参照系,相应的计算结果貌似就不那么可信了

假设直接计算斜边距离,距离公式推算(同时取整+0.5进位)

l = sqrt((y2-y1)* (y2-y1) +(x2-x1)*(x2-x1));
int _l_ = (int)(l+0.5)

斜面的点的个数是否正确?假设这是一个简单的二维面,每个像素点都有值,那么如何获取这个斜面上各个点的坐标?

假定以左侧的点为起始点(实际上确实是),那么以底边为参照线,实际上可以通过斜率计算得到斜面信息,但是有几个问题

1.像素数目变成了

int pixel = abs(x1,x2);

2.斜率k的浮点数问题

float k = (y2-y1)*1.0.(x2-x1);

3.计算取坐标问题

(x,y) = ((x_start+i),(int)(i*k+y_start));

4.像素值读取问题(反转)

int pixel_ = readPixel(hBoard,BUFFER,0,y,x);

注意实际的二维坐标系和二维数组坐标系的区别即可,读反了容易造成越界操作,导致卡死,卡退之类

变提示字操作

最简单的就是单按钮复用,既负责打开也负责关闭,这时候就需要变提示字操作,后台操作还是比较简单的

Qt的检测状态控件

ui->querenxianshi_zhixian_->checkState();

1.它的未勾选状态确实是FALSE,但是勾选状态不是TRUE

2.条件判断最好注意

if( ui->querenxianshi_zhixian_->checkState() )
{
  //do
}
else
{
  //do
}

Qt的存储数据操作

有一个小玩意需要友情提示:

String str1 = "########";
String str2 = "********";

就C++而言,实际上是支持字符串直接相连操作的,因此不需要类C一样的复杂,或是调用连结函数

strcat(str1,str2); /*no need but to add directly*/ 
Qstring str3;
str3 = str1+str2;(correct)
str3 = str1+str2+"http";(error)

不要随意连接自定义在双引号内部的字符串,最好是先提前声明定义一下,这也不是什么麻烦事

Qt存储数据到.txt文件

pathname+filename;

注意操作:

1.先确定可执行文件位置并以此为起点

startpath;

2.文件夹分隔符问题

String str = "//";(right and available for use)
String str = "\\";

一波固定操作(可变权限):

QIODevice::Truncate;

清空原内容的模式打开固定名文件,这样做纯属是为了方便,之前存图是为了体验一波操作,这样存储文件的话,就纯属为了编码操作简单

QIODevice::ReadWrite;

赋予读写权限,实际上只写即可,因为不读!不过权限开的大一点无所谓,也不是什么大事情

QTextStream stream(&file);
stream <<str<<endl;

写入流绑定操作,利用打印的方式写入,还是很友好的,但要注意在写入之前转为字符串,不然有点麻烦

感谢一波Qt的快速转换操作吧骚年,极其方便

Qt实现统计数据画图问题

1.曲线图

2.折线图

3.柱状图

容我说一句,这个并不像Matlab、Python又或者是其它极其方便的脚本语言操作,这个是真的麻烦,层层递进

QChart *chart;
QChartView *chartView;
QLineSeries *seris;

先填充:

基本数据点还是要填充的,不然显示出来一片空白,就像坐标上的描点一样,这里是先把点存在seris变量里

chart->addSeries(seris);
chartView ->setChart(chart);

实际上Qt里面具有Widget属性的控件基本支持Layout,而Layout则是添加View的不二之选,这也是尝试得来的,Qt还是挺深的

坐标设置

单纯的作图是没有坐标的,因此需要在这上面下一番功夫,一般都是自适应坐标,但是有时为了增强图线功能,坐标和显示方面还是要下大力气的

关于柱状图

常规的变量还是跑不了的,只是这里有几个小操作

这是每住,所谓每住就是柱状图的一个单坐标点,单坐标点支持不同的多柱表示,多坐标点多显示

当然,这里依旧需要GridLayout的加持,实际上每个Widget的属性有所不同,例如MainWindow的一个属性(.setCentralWidget(chartView)),也可以很好的满足显示的需要,并且可调!

如何动态刷新?

1.定时器操作当能够熟练(嵌入式玩的好可以很快理解)

2.尽量写一个单独刷新的函数

针对这个问题,我想说的是,全局变量的强大优势(尽管有的人不是很喜欢全局变量,但是这里我觉得很合适)

定义:

extern QBarSet *set0,......;

利用自带的replace属性刷新即可(定时器内部)

3.不要刷新太快

timer-<setInterval(1000);(ms for uint and this is right)
timer-<setInterval(10);(ms for uint and this is error) 

为了良好的视觉体验,还是1s刷新一次靠谱点,刷的太快,实际上并不能做到实时显示,反而影响程序的靠谱性

友情提示:

B站的大数据统计可视化可以通过这个做出来,只要有数据来源即可,方便!

https://www.bilibili.com/video/av42386573?from=search&seid=15523096879786928753

改天有时间玩一下,不过觉得没啥意义,呵呵🤣

桃花好看呐,家里的桃花开花了,妙啊

五星红旗迎风飘扬!на ветру поднимается красный флаг пяти звезд!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注