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…

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

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

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…

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…

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 …

RabbitMQ快速实战

目录 什么是消息队列&#xff1f; 消息队列的优势 应用解耦 异步提速 削峰填谷 总结 主流MQ产品特点比较 Rabbitmq快速上手 创建用户admin Exchange和Queue Connection和Channel RabbitMQ中的核心概念总结 什么是消息队列&#xff1f; MQ全称Message Queue&#xf…

Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)

Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入) 反转(转移)控制(IOC Inverse of Control) 控制&#xff1a;对于成员变量赋值的控制权 反转控制&#xff1a;把对于成员变量赋值的控制权&#xff0c;从代码中反转(转移)到Spring⼯⼚和配置⽂件中完成好处&#xff1a;…

七、并发工具(上)

一、自定义线程池 1&#xff09;背景&#xff1a; 在 QPS 量比较高的情况下&#xff0c;我们不可能说所有的访问都创建一个线程执行&#xff0c;这会导致内存占用过高&#xff0c;甚至有可能出现 out of memory另外也要考虑 cpu 核数&#xff0c;如果请求超过了cpu核数&#…

【bitonicSort学习】

bitonicSort学习 什么是Bitonic Sort核心 什么是Bitonic Sort https://zhuanlan.zhihu.com/p/53963918 这个是用来并行排序的一个操作 之前学过一些CPU排序&#xff0c;快排 冒泡 归并啥的&#xff0c;有一些能转成并行&#xff0c;有一些不适合 像快排这种二分策略就可以考虑…

Vue3的自定义指令怎么迁移到nuxt3

一、找到Vue3中指令的源码 const DISTANCE 100; // 距离 const ANIMATIONTIME 500; // 500毫秒 let distance: number | null null,animationtime: number | null null; const map new WeakMap(); const ob new IntersectionObserver((entries) > {for (const entrie…