C++ 单一附合导线平差程序

一、以下图附合导线为例,图形如下:

二、第一步,读取测量数据,读取界面设计如下:

 读取数据文本文件格式如下:

(1)已知点坐标数据格式:

(2)角度观测值数据格式:

(3)边长观测值数据格式:

 读取文本文件的代码如下:

void TraverseAdjustment::onReadDataKnown()
{//打开文件对话框QString fileName = QFileDialog::getOpenFileName(this, tr("打开已知点数据"));QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text))QMessageBox::StandardButton btnValue = QMessageBox::information(this, tr("提示"), tr("打开失败!"));//读取文本文件数据QTextStream stream(&file);pointKnown pk1;while (!stream.atEnd()){QString str = stream.readLine();QStringList list=str.split(",");pk1.number = list.at(0);pk1.x = list.at(1).toDouble();pk1.y = list.at(2).toDouble();ui.textEdit->append(str);vpKnown.push_back(pk1);}ui.lineEdit->setText(fileName);
}

说明:需要先创建一个字符串变量用于存储文件对话框返回的路径,然后创建一个文件操作对象,用返回路径进行初始化。使用open()函数打开文本文件,随后设置一个读写流对象,用于逐行读取文本,将单行文本分割后,赋值给创建的结构体对象,然后添加到vecctor中。

三、第二步,计算角度闭合差

观测值为左角时,有

{\alpha _{CD}}'=\alpha _{AB}-n*180+\sum\beta _{i}

f_{\beta }={\alpha }'_{CD}-\alpha _{CD}

其中n为导线转折角数,这里如图1的附合导线,n=8.

注意1:观测角度值之和应为各个观测角度(DMS度分秒格式)的十进制度数的总和,因此,需要将原始观测值逐一转换成十进制度,再求和。(原始角度观测数据为度分秒格式的) 

注意2:\alpha _{CD}等方位角的计算,由于atan()等三角函数返回的是弧度值,因此需要将结果转化成十进制度值再输出。利用坐标反算方法,得到已知边的方位角,如下:

\alpha _{AB}=atan(\left | y_{A} -y_{B}\right |/\left | x_{A}-x_{B} \right |)

(1)方位角计算代码如下:

double TraverseAdjustment::CoordinateInverse(double xa, double ya, double xb, double yb)
{double arfa_ab = atan(abs(yb - ya) / abs(xb - xa));//返回的是弧度值arfa_ab = Radian2Angle(arfa_ab);if (ya<yb&&xa>xb){arfa_ab=180 - arfa_ab;}if (ya > yb && xa > xb){arfa_ab = 180 + arfa_ab;}if (ya > yb && xa < xb){arfa_ab = 360 - arfa_ab;}return arfa_ab;//返回十进制度数
}

 (2)闭合差计算代码如下:

void TraverseAdjustment::onAngleClosureError()
{double arfa_1=0;//角度观测值之和for (auto& val : vA){double a = val.value;a = DMS2Angle(a);arfa_1 = arfa_1 + a;}qDebug() << arfa_1;qDebug() << DMS2Angle(1644.2828);double arfa_ab;//AB方位角值double arfa_cd;//CD方位角值arfa_ab = CoordinateInverse(vpKnown.at(0).x, vpKnown.at(0).y, vpKnown.at(1).x, vpKnown.at(1).y);arfa_cd = CoordinateInverse(vpKnown.at(2).x, vpKnown.at(2).y, vpKnown.at(3).x, vpKnown.at(3).y);qDebug() << arfa_ab;qDebug() << arfa_cd;qDebug() << DMS2Angle(303.2728);qDebug() << DMS2Angle(147.5628);Rab = arfa_ab;Rcd = arfa_cd;n = vA.size();double arfa_cd1 = 0;//理论角度值arfa_cd1 = arfa_ab - n * 180+arfa_1;if (arfa_cd1 > 360){int t1 = arfa_cd1 / 360;arfa_cd1 = arfa_cd1 - t1 * 360;}double f_beta = arfa_cd1-arfa_cd;f_beta = f_beta * 3600;f = f_beta;ui.textEdit_2->append("角度闭合差:");ui.textEdit_2->append(QString::number(f_beta));ui.textEdit_2->append("限差:");ui.textEdit_2->append(QString::number(24*sqrt(n)));if (f_beta <= 24 * sqrt(n)){ui.textEdit_2->append("合格");}else{ui.textEdit_2->append("不合格");}
}

四、第三步,计算方位角

\hat{\beta _{i}}=\beta _{i}+v_{i} 

若角度闭合差附合限差,则将角度闭合差均分至各角度观测值(即求改正数),然后使用改正后的角度观测值计算各测站的方位角信息。观测值为左角时,有如下:

\alpha _{i}=\alpha _{i-1}+\beta _{i}-180

以此推算各测站方位角。

(1)方位角计算代码如下:

void TraverseAdjustment::CalculateAzimuth()
{//计算角度观测值改正数double t1 = -f / n;t1 = t1 / 3600;Angle a1;for (auto& val : vA){a1.value = DMS2Angle(val.value)+t1;a1.number = val.number;a1.number1 = val.number1;a1.number2 = val.number2;va.push_back(a1);}ui.textEdit_2->clear();ui.textEdit_2->append("方位角结果:");Angle a2; double R1 = Rab;for (int i = 0; i < va.size(); i++){double R = R1 + va.at(i).value-180;if (R > 360){int t2 = R / 360;R = R - t2 * 360;}a2.number = va.at(i).number;a2.number1 = va.at(i).number1;a2.number2 = va.at(i).number2;a2.value = R;ui.textEdit_2->append(QString::number(R));vAzi.push_back(a2);R1 = R;}
}

五、第四步,计算坐标增量

 注意:这里的cos()函数等三角函数的输入值为弧度,应把方位角转化成护弧度在计算,否则结果错误。

(1)计算坐标增量的代码如下:

void TraverseAdjustment::onCalIncrement()
{Side s1; ui.textEdit_2->clear();ui.textEdit_2->append("X坐标增量:");for (int i = 0; i < vAzi.size(); i++){s1.number1 = vAzi.at(i).number;s1.number2 = vAzi.at(i).number2;for (int j = 0; j < vS.size(); j++){if (vAzi.at(i).number == vS.at(j).number1 && vAzi.at(i).number2 == vS.at(j).number2){double b1 = vAzi.at(i).value;b1 = Angle2Radian(b1);s1.value = vS.at(j).value * cos(b1);//cos函数输入值需为弧度ui.textEdit_2->append(QString::number(s1.value));vXIn.push_back(s1);s1.value = vS.at(j).value * sin(b1);//sin函数输入值需为弧度vYIn.push_back(s1);break;}}}ui.textEdit_2->append("Y坐标增量:");for (auto& val : vYIn){ui.textEdit_2->append(QString::number(val.value));}
}

六、第五步,计算坐标改正数

 这里只需按照上述公式计算即可。

(1)计算坐标改正数代码如下:

void TraverseAdjustment::onCalCorrection()
{ui.textEdit_2->clear();ui.textEdit_2->append("X增量改正数:");//计算坐标增量之和double detax = 0;double detay = 0;for (auto& val : vXIn){double b1 = val.value;detax = detax + b1;}for (auto& val : vYIn){double b1 = val.value;detay = detay + b1;}//计算坐标增量闭合差fx = detax - (vpKnown.at(2).x - vpKnown.at(1).x);fy = detay - (vpKnown.at(2).y - vpKnown.at(1).y);//计算坐标改正数double s1 = 0;//导线边距离之和for (auto& val : vS){s1 = s1 + val.value;}Side s2;for (int i = 0; i<vXIn.size(); i++){double d;for (int j=0; j < vS.size(); j++){if (vXIn.at(i).number1 == vS.at(j).number1 && vXIn.at(i).number2 == vS.at(j).number2){d = vS.at(j).value;}}s2.number1 = vXIn.at(i).number1;s2.number2 = vXIn.at(i).number2;s2.value = -fx / s1 * d;ui.textEdit_2->append(QString::number(s2.value));vX.push_back(s2);}ui.textEdit_2->append("Y增量改正数:");for (int i = 0; i < vYIn.size(); i++){double d;for (int j = 0; j < vS.size(); j++){if (vYIn.at(i).number1 == vS.at(j).number1 && vYIn.at(i).number2 == vS.at(j).number2){d = vS.at(j).value;}}s2.number1 = vXIn.at(i).number1;s2.number2 = vXIn.at(i).number2;s2.value = -fy / s1 * d;ui.textEdit_2->append(QString::number(s2.value));vY.push_back(s2);}
}

七、第六步,计算未知点坐标值

按公式计算即可。

(1)计算坐标值代码如下:

void TraverseAdjustment::onCalCoordinate()
{ui.textEdit_2->clear();ui.textEdit_2->append("改正后X增量:");double x0 = vpKnown.at(1).x;double y0 = vpKnown.at(1).y;for (int i=0;i<vXIn.size();i++){vXIn.at(i).value = vXIn.at(i).value + vX.at(i).value;ui.textEdit_2->append(QString::number(vXIn.at(i).value));}ui.textEdit_2->append("改正后Y增量:");for (int i = 0; i < vYIn.size(); i++){vYIn.at(i).value = vYIn.at(i).value + vY.at(i).value;ui.textEdit_2->append(QString::number(vYIn.at(i).value));}ui.textEdit_2->append("X坐标:");pointKnown pk1; int t2 = 0;for (auto& val : vXIn){pk1.number = val.number1;pk1.x = x0 + val.value;pk1.y = y0 + vYIn.at(t2).value;vp.push_back(pk1);x0 = pk1.x;y0 = pk1.y;if (t2 <= vYIn.size()-2){ui.textEdit_2->append(QString::number(pk1.x, 'f', 8));}t2++;}ui.textEdit_2->append("Y坐标:");vp.pop_back();for (auto& val : vp){ui.textEdit_2->append(QString::number(val.y,'f',8));}
}

 八、程序运行结果如下:

 九、上述计算结果均校对过,结果准确。附上完整代码

//.cpp文件
#include "TraverseAdjustment.h"TraverseAdjustment::TraverseAdjustment(QWidget *parent): QWidget(parent)
{ui.setupUi(this);connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(onReadDataKnown()));connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(onReadDataAngle()));connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(onReadDataSide()));connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(onAngleClosureError()));connect(ui.pushButton_4, SIGNAL(clicked()), this, SLOT(CalculateAzimuth()));connect(ui.pushButton_6, SIGNAL(clicked()), this, SLOT(onCalIncrement()));connect(ui.pushButton_7, SIGNAL(clicked()), this, SLOT(onCalCorrection()));connect(ui.pushButton_8, SIGNAL(clicked()), this, SLOT(onCalCoordinate()));ui.lineEdit->setReadOnly(true);ui.lineEdit_2->setReadOnly(true);ui.lineEdit_3->setReadOnly(true);ui.textEdit->setReadOnly(true);ui.textEdit_2->setReadOnly(true);ui.textEdit->append("读入数据展示:");
}TraverseAdjustment::~TraverseAdjustment()
{}void TraverseAdjustment::onCalCoordinate()
{ui.textEdit_2->clear();ui.textEdit_2->append("改正后X增量:");double x0 = vpKnown.at(1).x;double y0 = vpKnown.at(1).y;for (int i=0;i<vXIn.size();i++){vXIn.at(i).value = vXIn.at(i).value + vX.at(i).value;ui.textEdit_2->append(QString::number(vXIn.at(i).value));}ui.textEdit_2->append("改正后Y增量:");for (int i = 0; i < vYIn.size(); i++){vYIn.at(i).value = vYIn.at(i).value + vY.at(i).value;ui.textEdit_2->append(QString::number(vYIn.at(i).value));}ui.textEdit_2->append("X坐标:");pointKnown pk1; int t2 = 0;for (auto& val : vXIn){pk1.number = val.number1;pk1.x = x0 + val.value;pk1.y = y0 + vYIn.at(t2).value;vp.push_back(pk1);x0 = pk1.x;y0 = pk1.y;if (t2 <= vYIn.size()-2){ui.textEdit_2->append(QString::number(pk1.x, 'f', 8));}t2++;}ui.textEdit_2->append("Y坐标:");vp.pop_back();for (auto& val : vp){ui.textEdit_2->append(QString::number(val.y,'f',8));}
}void TraverseAdjustment::onCalCorrection()
{ui.textEdit_2->clear();ui.textEdit_2->append("X增量改正数:");//计算坐标增量之和double detax = 0;double detay = 0;for (auto& val : vXIn){double b1 = val.value;detax = detax + b1;}for (auto& val : vYIn){double b1 = val.value;detay = detay + b1;}//计算坐标增量闭合差fx = detax - (vpKnown.at(2).x - vpKnown.at(1).x);fy = detay - (vpKnown.at(2).y - vpKnown.at(1).y);//计算坐标改正数double s1 = 0;//导线边距离之和for (auto& val : vS){s1 = s1 + val.value;}Side s2;for (int i = 0; i<vXIn.size(); i++){double d;for (int j=0; j < vS.size(); j++){if (vXIn.at(i).number1 == vS.at(j).number1 && vXIn.at(i).number2 == vS.at(j).number2){d = vS.at(j).value;}}s2.number1 = vXIn.at(i).number1;s2.number2 = vXIn.at(i).number2;s2.value = -fx / s1 * d;ui.textEdit_2->append(QString::number(s2.value));vX.push_back(s2);}ui.textEdit_2->append("Y增量改正数:");for (int i = 0; i < vYIn.size(); i++){double d;for (int j = 0; j < vS.size(); j++){if (vYIn.at(i).number1 == vS.at(j).number1 && vYIn.at(i).number2 == vS.at(j).number2){d = vS.at(j).value;}}s2.number1 = vXIn.at(i).number1;s2.number2 = vXIn.at(i).number2;s2.value = -fy / s1 * d;ui.textEdit_2->append(QString::number(s2.value));vY.push_back(s2);}
}void TraverseAdjustment::onCalIncrement()
{Side s1; ui.textEdit_2->clear();ui.textEdit_2->append("X坐标增量:");for (int i = 0; i < vAzi.size(); i++){s1.number1 = vAzi.at(i).number;s1.number2 = vAzi.at(i).number2;for (int j = 0; j < vS.size(); j++){if (vAzi.at(i).number == vS.at(j).number1 && vAzi.at(i).number2 == vS.at(j).number2){double b1 = vAzi.at(i).value;b1 = Angle2Radian(b1);s1.value = vS.at(j).value * cos(b1);//cos函数输入值需为弧度ui.textEdit_2->append(QString::number(s1.value));vXIn.push_back(s1);s1.value = vS.at(j).value * sin(b1);//sin函数输入值需为弧度vYIn.push_back(s1);break;}}}ui.textEdit_2->append("Y坐标增量:");for (auto& val : vYIn){ui.textEdit_2->append(QString::number(val.value));}
}void TraverseAdjustment::onReadDataKnown()
{//打开文件对话框QString fileName = QFileDialog::getOpenFileName(this, tr("打开已知点数据"));QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text))QMessageBox::StandardButton btnValue = QMessageBox::information(this, tr("提示"), tr("打开失败!"));//读取文本文件数据QTextStream stream(&file);pointKnown pk1;while (!stream.atEnd()){QString str = stream.readLine();QStringList list=str.split(",");pk1.number = list.at(0);pk1.x = list.at(1).toDouble();pk1.y = list.at(2).toDouble();ui.textEdit->append(str);vpKnown.push_back(pk1);}ui.lineEdit->setText(fileName);
}void TraverseAdjustment::onReadDataAngle()
{//打开文件对话框QString fileName = QFileDialog::getOpenFileName(this, tr("打开角度观测数据"));QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text))QMessageBox::StandardButton btnValue = QMessageBox::information(this, tr("提示"), tr("打开失败!"));//读取数据QTextStream stream(&file);Angle va1;while (!stream.atEnd()){QString str = stream.readLine();QStringList list = str.split(",");va1.number = list.at(0);va1.number1 = list.at(1);va1.number2 = list.at(2);va1.value = list.at(3).toDouble();ui.textEdit->append(str);vA.push_back(va1);}ui.lineEdit_2->setText(fileName);
}void TraverseAdjustment::onReadDataSide()
{//打开文件对话框QString fileName = QFileDialog::getOpenFileName(this, tr("打开边长观测数据"));QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text))QMessageBox::StandardButton btnValue = QMessageBox::information(this, tr("提示"), tr("打开失败!"));//读取数据QTextStream stream(&file);Side vs1;while (!stream.atEnd()){QString str = stream.readLine();QStringList list = str.split(",");vs1.number1 = list.at(0);vs1.number2 = list.at(1);vs1.value = list.at(2).toDouble();ui.textEdit->append(str);vS.push_back(vs1);}ui.lineEdit_3->setText(fileName);
}void TraverseAdjustment::CalculateAzimuth()
{//计算角度观测值改正数double t1 = -f / n;t1 = t1 / 3600;Angle a1;for (auto& val : vA){a1.value = DMS2Angle(val.value)+t1;a1.number = val.number;a1.number1 = val.number1;a1.number2 = val.number2;va.push_back(a1);}ui.textEdit_2->clear();ui.textEdit_2->append("方位角结果:");Angle a2; double R1 = Rab;for (int i = 0; i < va.size(); i++){double R = R1 + va.at(i).value-180;if (R > 360){int t2 = R / 360;R = R - t2 * 360;}a2.number = va.at(i).number;a2.number1 = va.at(i).number1;a2.number2 = va.at(i).number2;a2.value = R;ui.textEdit_2->append(QString::number(R));vAzi.push_back(a2);R1 = R;}
}double TraverseAdjustment::Angle2Radian(double a)
{a = a * 0.017453293;return a;
}double TraverseAdjustment::Radian2Angle(double a)
{a = a * 57.29578;return a;
}double TraverseAdjustment::DMS2Angle(double a)
{int deg; double min, sed;deg = int(a);min = int((a - deg) * 100);sed = ((a - deg) * 100 - min) * 100;return deg + min / 60 + sed / 3600;
}void TraverseAdjustment::onAngleClosureError()
{double arfa_1=0;//角度观测值之和for (auto& val : vA){double a = val.value;a = DMS2Angle(a);arfa_1 = arfa_1 + a;}qDebug() << arfa_1;qDebug() << DMS2Angle(1644.2828);double arfa_ab;//BA方位角值double arfa_cd;//CD方位角值arfa_ab = CoordinateInverse(vpKnown.at(0).x, vpKnown.at(0).y, vpKnown.at(1).x, vpKnown.at(1).y);arfa_cd = CoordinateInverse(vpKnown.at(2).x, vpKnown.at(2).y, vpKnown.at(3).x, vpKnown.at(3).y);qDebug() << arfa_ab;qDebug() << arfa_cd;qDebug() << DMS2Angle(303.2728);qDebug() << DMS2Angle(147.5628);Rab = arfa_ab;Rcd = arfa_cd;n = vA.size();double arfa_cd1 = 0;//理论角度值arfa_cd1 = arfa_ab - n * 180+arfa_1;if (arfa_cd1 > 360){int t1 = arfa_cd1 / 360;arfa_cd1 = arfa_cd1 - t1 * 360;}double f_beta = arfa_cd1-arfa_cd;f_beta = f_beta * 3600;f = f_beta;ui.textEdit_2->append("角度闭合差:");ui.textEdit_2->append(QString::number(f_beta));ui.textEdit_2->append("限差:");ui.textEdit_2->append(QString::number(24*sqrt(n)));if (f_beta <= 24 * sqrt(n)){ui.textEdit_2->append("合格");}else{ui.textEdit_2->append("不合格");}
}double TraverseAdjustment::CoordinateInverse(double xa, double ya, double xb, double yb)
{double arfa_ab = atan(abs(yb - ya) / abs(xb - xa));//返回的是弧度值arfa_ab = Radian2Angle(arfa_ab);if (ya<yb&&xa>xb){arfa_ab=180 - arfa_ab;}if (ya > yb && xa > xb){arfa_ab = 180 + arfa_ab;}if (ya > yb && xa < xb){arfa_ab = 360 - arfa_ab;}return arfa_ab;//返回十进制度数
}
//.h文件
#pragma once#include <QtWidgets/QWidget>
#include "ui_TraverseAdjustment.h"
#include<QFileDialog>
#include<QFile>
#include<QMessageBox>
#include<QTextStream>
#include<QStringList>
#pragma execution_character_set("UTF-8")
#include"math.h"
#include<qDebug>struct pointKnown
{QString number;double x;double y;
};struct Angle 
{QString number;QString number1;QString number2;double value;
};struct Side
{QString number1;QString number2;double value;
};class TraverseAdjustment : public QWidget
{Q_OBJECTpublic:TraverseAdjustment(QWidget *parent = nullptr);~TraverseAdjustment();public:std::vector<pointKnown> vpKnown;//已知点坐标std::vector<Angle> vA;//角度观测值std::vector<Side> vS;//边长观测值double f;//角度闭合差int n;//导线边数std::vector<Angle> va;//添加改正数后的角度值std::vector<Angle> vAzi;//方位角值double Rab, Rcd;//已知起始、终止边对应方位角std::vector<Side> vXIn;//坐标增量Xstd::vector<Side> vYIn;//坐标增量Ydouble fx, fy;//坐标增量闭合差std::vector<Side> vX;//X增量改正数std::vector<Side> vY;//Y增量改正数std::vector<pointKnown> vp;//各测点最终坐标值public slots:void onReadDataKnown();void onReadDataAngle();void onReadDataSide();void onAngleClosureError();void CalculateAzimuth();void onCalIncrement();void onCalCorrection();void onCalCoordinate();public:double Angle2Radian(double a);double DMS2Angle(double a);double Radian2Angle(double a);double CoordinateInverse(double xa, double ya, double xb, double yb);private:Ui::TraverseAdjustmentClass ui;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++杂货铺】详解类和对象 [下]

个人博客&#xff1a;代码菌-CSDN博客 专栏&#xff1a;C杂货铺_代码菌的博客-CSDN博客 目录 &#x1f308;前言&#x1f308; &#x1f4c1; 初始化列表&#xff08;灰常重要&#xff09; &#x1f4c2; 引入 &#x1f4c2; 概念 &#x1f4c2; 特性 &#x1f4c1; 拓展构…

51单片机编程应用(C语言):数码管

目录 1.数码管原理 一位数码管引脚定义&#xff1a; 四位一体数码管&#xff1a; 多个数码管同时显示不同数字 51单片机的数码管的原理图 51单片机实现静态显示和动态显示 静态显示&#xff1a; 动态显示&#xff1a; 1.数码管原理 一位数码管引脚定义&#xff1a; 数码…

外包干了10个月,技术退步明显...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【代码随想录】LC 349. 两个数组的交集

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 349. 两个数组的交集 2、题目描述 二、解题报…

C语言实战项目<贪吃蛇>

我们这篇会使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇 实现基本的功能&#xff1a; 结果如下: 1.一些Win32 API知识 本次实现呢我们会用到一些Win32 API的知识(WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口): 1)控制窗口大小 我们可以使用…

【Qt学习笔记】(二)信号和槽

信号和槽 1 信号和槽概述2 信号和槽的使用3 可视化生成槽函数4 自定义信号和槽5 带参数的信号和槽6 信号与槽的连接方式7 信号与槽的断开8 使用 Lambda 表达式来定义槽函数 1 信号和槽概述 在Qt中&#xff0c;用户和控件的每次交互过程称为一个事件。比如"用户点击按钮&q…

实时时钟芯片DS1307单片机C语言驱动程序

实时时钟RTC相关索引 1.单片机RTC及时钟芯片的时间到底从哪一年起始&#xff1f; 2.STM32F103单片机内部RTC实时时钟驱动程序 3.实时时钟芯片DS1302单片机C语言驱动程序 4.实时时钟芯片DS1307单片机C语言驱动程序 一、DS1307简介 DS1307是一款非易失性实时时钟&#xff08;R…

代码随想录算法训练营第五十一天 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目链接&#xff1a;309.最佳买卖股票时机含冷冻期I 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 *i* 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xf…

【Java程序设计】【C00209】基于SSM个人求职管理系统(论文+PPT)

基于SSM个人求职管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这个一个基于SSM的个人求职管理系统&#xff0c;本系统共分为三种权限&#xff1a;管理员、普通管理员、用户 管理员&#xff1a;首页、个人中心、用户管理、管理…

Day 31 | 贪心算法 理论基础 、455.分发饼干 、 376. 摆动序列 、 53. 最大子序和

理论基础 文章讲解 455.分发饼干 题目 文章讲解 视频讲解 思路&#xff1a;从小饼干开始喂小胃口 class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int start 0;int count 0;for (int i 0; i < s.length &&a…

go并发编程-介绍与Goroutine使用

1. 并发介绍 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中的多个…

Go语言的100个错误使用场景(11-20)|项目组织和数据类型

前言 大家好&#xff0c;这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍&#xff0c;我初步浏览之后&#xff0c;大为惊喜。就像这书中第一章的标题说到的&#xff1a;“Go: Simple to learn but hard to master”&#xff0c;整本书通过分析100…

DevSecOps 参考模型介绍

目录 一、参考模型概述 1.1 概述 二、参考模型分类 2.1 DevOps 组织型模型 2.1.1 DevOps 关键特性 2.1.1.1 模型特性图 2.1.1.2 特性讲解 2.1.1.2.1 自动化 2.1.1.2.2 多边协作 2.1.1.2.3 持续集成 2.1.1.2.4 配置管理 2.1.2 DevOps 生命周期 2.1.2.1 研发过程划分…

leetcode刷题(剑指offer)54.螺旋矩阵

54.螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#xff1a;ma…

npm 安装时卡在 sill idealTree buildDeps 不动

网上很多博客给出的解决方案是将镜像源修改为淘宝镜像源&#xff0c;如下&#xff1a; 1. 查看当前的镜像网址 npm config get registry 2. 把npm的镜像地址改成taobao的 npm config set registry https://registry.npm.taobao.org3. 检验是否设置成功 npm config get regi…

Android升级版本兼容问题

1、JDK的选择 AndroidJavaAPI and language features supported14 (API 34)17Core libraries13 (API 33)11Core libraries12 (API 32)11Java API11 and lowerAndroid versions https://developer.android.com/build/jdks The following table lists which version of Gradle…

Java基础-集合框架

集合框架&#xff1a; 内存层面可考虑的数据存储容器&#xff1a;数组&#xff0c;集合 数组的特点&#xff1a;长度&#xff0c;存储元素类型确定&#xff0c;既可以放基本数据类型&#xff0c;也可以放引用数据类型 缺点&#xff1a;长度不可变&#xff0c;存储元素特点单…

从零开始 Linux(一):基础介绍与常用指令总结

从零开始 Linux 01. 概念理解 1.1 什么是 Linux&#xff1f; Linux 是一个开源免费的 操作系统&#xff0c;具有很好的稳定性、安全性&#xff0c;且有很强的处理高并发的能力 Linux 的应用场景&#xff1a; 可以在 Linux 下开发项目&#xff0c;比如 JavaEE、大数据、Python…

Arduino 官网上下载和使用开发板

在 Arduino 官网上下载和使用开发板可以按照以下步骤进行&#xff1a; 打开浏览器&#xff0c;访问 Arduino 官网&#xff08;https://www.arduino.cc/&#xff09;。在官网首页&#xff0c;可以看到各种型号的 Arduino 开发板和相关产品。根据自己的需求选 择合适的开发板型号…

3D词云图

工具库 tagcanvas.min.js vue3&#xff08;框架其实无所谓&#xff0c;都可以&#xff09; 实现 <script setup> import { onMounted, ref } from vue; import ./tagcanvas.min.js;const updateFlag ref(false);// 词云图初始化 const initWordCloud () > {let …