feat:煤溜检测打包程序

This commit is contained in:
徐超 2024-11-12 17:35:54 +08:00
parent 47793afcca
commit fefc6c60c4
3 changed files with 555 additions and 542 deletions

View File

@ -20,17 +20,20 @@
#include <memory> #include <memory>
CoalDistributBarChartWidget::CoalDistributBarChartWidget(QWidget* parent) CoalDistributBarChartWidget::CoalDistributBarChartWidget(QWidget* parent)
: QWidget(parent), m_tcpSocket(new QTcpSocket(this)) { : QWidget(parent)
, m_tcpSocket(new QTcpSocket(this))
{
initializeChart(); initializeChart();
m_systemSetting = new QSettings("system.ini", QSettings::IniFormat); m_systemSetting = new QSettings("system.ini", QSettings::IniFormat);
// connectTCPSocket(); connectTCPSocket();
// setupTimer(); setupTimer();
} }
CoalDistributBarChartWidget::~CoalDistributBarChartWidget() { CoalDistributBarChartWidget::~CoalDistributBarChartWidget()
{
if (m_tcpSocket->state() == QAbstractSocket::ConnectedState) { if (m_tcpSocket->state() == QAbstractSocket::ConnectedState) {
m_tcpSocket->disconnectFromHost(); m_tcpSocket->disconnectFromHost();
m_tcpSocket->waitForDisconnected(); m_tcpSocket->waitForDisconnected();
@ -38,7 +41,8 @@ CoalDistributBarChartWidget::~CoalDistributBarChartWidget() {
delete m_tcpSocket; delete m_tcpSocket;
} }
void CoalDistributBarChartWidget::updateChart() { void CoalDistributBarChartWidget::updateChart()
{
int radio = getCoalRatioByTCPSocket(); int radio = getCoalRatioByTCPSocket();
if (radio < 0 || radio > 90) { if (radio < 0 || radio > 90) {
return; return;
@ -50,7 +54,8 @@ void CoalDistributBarChartWidget::updateChart() {
m_set->insert(0, radio); m_set->insert(0, radio);
} }
void CoalDistributBarChartWidget::initializeChart() { void CoalDistributBarChartWidget::initializeChart()
{
// 创建图标 // 创建图标
m_chart = new QChart(); m_chart = new QChart();
@ -110,7 +115,8 @@ void CoalDistributBarChartWidget::initializeChart() {
setLayout(layout); setLayout(layout);
} }
void CoalDistributBarChartWidget::setupTimer() { void CoalDistributBarChartWidget::setupTimer()
{
// 定时器设置 // 定时器设置
m_timer = new QTimer(this); m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, connect(m_timer, &QTimer::timeout, this,
@ -118,7 +124,8 @@ void CoalDistributBarChartWidget::setupTimer() {
m_timer->start(1000); // 每秒更新一次 m_timer->start(1000); // 每秒更新一次
} }
void CoalDistributBarChartWidget::connectTCPSocket() { void CoalDistributBarChartWidget::connectTCPSocket()
{
QString ipAddress = m_systemSetting->value("addr/ip").toString(); QString ipAddress = m_systemSetting->value("addr/ip").toString();
quint16 port = m_systemSetting->value("addr/port").toInt(); quint16 port = m_systemSetting->value("addr/port").toInt();
@ -129,7 +136,8 @@ void CoalDistributBarChartWidget::connectTCPSocket() {
} }
} }
int CoalDistributBarChartWidget::getCoalRatioByTCPSocket() { int CoalDistributBarChartWidget::getCoalRatioByTCPSocket()
{
if (m_tcpSocket->state() != QAbstractSocket::ConnectedState) { if (m_tcpSocket->state() != QAbstractSocket::ConnectedState) {
qDebug() << "未连接到服务器"; qDebug() << "未连接到服务器";
return -1; // 返回错误值 return -1; // 返回错误值
@ -210,7 +218,8 @@ int CoalDistributBarChartWidget::getCoalRatioByTCPSocket() {
return decimalValue; // 返回煤量占比 return decimalValue; // 返回煤量占比
} }
QByteArray CoalDistributBarChartWidget::createModbusTcpRequest() { QByteArray CoalDistributBarChartWidget::createModbusTcpRequest()
{
QByteArray request; QByteArray request;
QDataStream stream(&request, QIODevice::WriteOnly); QDataStream stream(&request, QIODevice::WriteOnly);
stream.setByteOrder(QDataStream::BigEndian); // 使用大端字节序 stream.setByteOrder(QDataStream::BigEndian); // 使用大端字节序

View File

@ -11,52 +11,55 @@
#include <QUrlQuery> #include <QUrlQuery>
CoalStatisticsChartWidget::CoalStatisticsChartWidget(QWidget* parent) CoalStatisticsChartWidget::CoalStatisticsChartWidget(QWidget* parent)
: QWidget(parent), ui(new Ui::CoalStatisticsChartWidget) { : QWidget(parent)
, ui(new Ui::CoalStatisticsChartWidget)
{
ui->setupUi(this); ui->setupUi(this);
m_systemSetting = new QSettings("system.ini", QSettings::IniFormat); m_systemSetting = new QSettings("system.ini", QSettings::IniFormat);
ui->dateTimeEdit_startTime->setDateTime( ui->dateTimeEdit_startTime->setDateTime(QDateTime::currentDateTime().addSecs(-8 * 3600));
QDateTime::currentDateTime().addSecs(-8 * 3600));
// initCustomCoalStatisticsBarChart(); // initCustomCoalStatisticsBarChart();
initCustomPlotBarChart(); initCustomPlotCoalStatisticsBarChart();
} }
CoalStatisticsChartWidget::~CoalStatisticsChartWidget() { delete ui; } CoalStatisticsChartWidget::~CoalStatisticsChartWidget() { delete ui; }
void CoalStatisticsChartWidget::on_pushButton_coalStatisOk_clicked() { void CoalStatisticsChartWidget::on_pushButton_coalStatisOk_clicked()
{
// 时间范围 // 时间范围
QString beginTimeStr = ui->dateTimeEdit_startTime->text(); QString beginTimeStr = ui->dateTimeEdit_startTime->text();
QString endTimeStr = ui->dateTimeEdit_endTime->text(); QString endTimeStr = ui->dateTimeEdit_endTime->text();
// 定义输出格式化后的时间
QString formattedBeginTime;
QString formattedEndTime;
formatTimeRange(beginTimeStr, endTimeStr, formattedBeginTime,
formattedEndTime);
// 统计单位 // 统计单位
QString statisticUnit = ui->comboBox_unit->currentText(); QString statisticUnit = ui->comboBox_unit->currentText();
m_volumeDataMap.clear(); // 创建 QDateTime 对象
getCoalStatisInfoByHttpRequest(formattedBeginTime, formattedEndTime, QDateTime beginTime = QDateTime::fromString(beginTimeStr, "yyyy/MM/d H:mm");
statisticUnit); QDateTime endTime = QDateTime::fromString(endTimeStr, "yyyy/MM/d H:mm");
ui->label_totalVolume->clear(); // 格式化为 "yyyy-MM-d H" 形式
ui->label_totalVolume->setText(QString("煤量总计:%1吨").arg(m_toalValue)); QString formattedBeginTime = beginTime.toString("yyyy-MM-dd HH");
QString formattedEndTime = endTime.toString("yyyy-MM-dd HH");
QString volumeDataMapStr = "总数" + QString::number(m_volumeDataMap.size()); QString startTimestr = "起始时间" + formattedBeginTime;
QString endTimestr = "终止时间" + formattedEndTime;
emit querySuccessInfo(volumeDataMapStr); emit querySuccessInfo(startTimestr);
emit querySuccessInfo(endTimestr);
// 更新查询的数据至图表 // 输出格式化后的时间
// updateCoalStatisticsChart(volumeDataMap); qDebug() << "Formatted Begin Time: " << formattedBeginTime;
qDebug() << "Formatted End Time: " << formattedEndTime;
qDebug() << "statisticUnit:" << statisticUnit;
getCoalStatisInfoByHttpRequest(formattedBeginTime, formattedEndTime, statisticUnit);
} }
void CoalStatisticsChartWidget::initCoalStatisticsBarChart() { void CoalStatisticsChartWidget::initCoalStatisticsBarChart()
{
// 创建图表 // 创建图表
m_chart = new QChart(); m_chart = new QChart();
m_chart->setBackgroundBrush(Qt::transparent); m_chart->setBackgroundBrush(Qt::transparent);
@ -96,8 +99,7 @@ void CoalStatisticsChartWidget::initCoalStatisticsBarChart() {
m_series->attachAxis(m_axisY); m_series->attachAxis(m_axisY);
// 布局设置 // 布局设置
QVBoxLayout *layout = QVBoxLayout* layout = static_cast<QVBoxLayout*>(ui->widget_coalChart->layout());
static_cast<QVBoxLayout *>(ui->widget_coalChart->layout());
if (!layout) { if (!layout) {
layout = new QVBoxLayout(ui->widget_coalChart); layout = new QVBoxLayout(ui->widget_coalChart);
ui->widget_coalChart->setLayout(layout); ui->widget_coalChart->setLayout(layout);
@ -113,16 +115,17 @@ void CoalStatisticsChartWidget::initCoalStatisticsBarChart() {
void CoalStatisticsChartWidget::formatTimeRange(const QString& beginTimeStr, void CoalStatisticsChartWidget::formatTimeRange(const QString& beginTimeStr,
const QString& endTimeStr, const QString& endTimeStr,
QString& formattedBeginTime, QString& formattedBeginTime,
QString &formattedEndTime) { QString& formattedEndTime)
{
// 创建 QDateTime 对象 // 创建 QDateTime 对象
QDateTime beginTime = QDateTime::fromString(beginTimeStr, "yyyy/MM/d HH:mm"); QDateTime beginTime = QDateTime::fromString(beginTimeStr, "yyyy/MM/d HH:mm");
QDateTime endTime = QDateTime::fromString(endTimeStr, "yyyy/MM/d HH:mm"); QDateTime endTime = QDateTime::fromString(endTimeStr, "yyyy/MM/d HH:mm");
// 判断转换是否成功 // 判断转换是否成功
if (!beginTime.isValid() || !endTime.isValid()) { // if (!beginTime.isValid() || !endTime.isValid()) {
qWarning() << "Invalid time format!"; // qWarning() << "Invalid time format!";
return; // return;
} // }
// 格式化为 "yyyy-MM-dd HH" 形式 // 格式化为 "yyyy-MM-dd HH" 形式
formattedBeginTime = beginTime.toString("yyyy-MM-dd HH"); formattedBeginTime = beginTime.toString("yyyy-MM-dd HH");
@ -130,7 +133,8 @@ void CoalStatisticsChartWidget::formatTimeRange(const QString &beginTimeStr,
} }
QList<QString> QList<QString>
CoalStatisticsChartWidget::getLastSixFullHours(const QDateTime &currentTime) { CoalStatisticsChartWidget::getLastSixFullHours(const QDateTime& currentTime)
{
// 将当前时间设置为整点 // 将当前时间设置为整点
QDateTime roundedTime = currentTime; QDateTime roundedTime = currentTime;
roundedTime.setTime(QTime(currentTime.time().hour(), 0)); // 设置时间到整点 roundedTime.setTime(QTime(currentTime.time().hour(), 0)); // 设置时间到整点
@ -143,13 +147,14 @@ CoalStatisticsChartWidget::getLastSixFullHours(const QDateTime &currentTime) {
QDateTime prevHour = roundedTime.addSecs(-i * 3600); // 向前推算每个整点 QDateTime prevHour = roundedTime.addSecs(-i * 3600); // 向前推算每个整点
timeList.append(prevHour.toString("YYYY/MM/dd H")); timeList.append(prevHour.toString("H"));
} }
return timeList; return timeList;
} }
void CoalStatisticsChartWidget::initCustomCoalStatisticsBarChart() { void CoalStatisticsChartWidget::initCustomCoalStatisticsBarChart()
{
// 创建图表 // 创建图表
m_chart = new QChart(); m_chart = new QChart();
m_chart->setBackgroundBrush(Qt::transparent); m_chart->setBackgroundBrush(Qt::transparent);
@ -186,8 +191,7 @@ void CoalStatisticsChartWidget::initCustomCoalStatisticsBarChart() {
m_series->attachAxis(m_axisY); m_series->attachAxis(m_axisY);
// 布局设置 // 布局设置
QVBoxLayout *layout = QVBoxLayout* layout = static_cast<QVBoxLayout*>(ui->widget_coalChart->layout());
static_cast<QVBoxLayout *>(ui->widget_coalChart->layout());
if (!layout) { if (!layout) {
layout = new QVBoxLayout(ui->widget_coalChart); layout = new QVBoxLayout(ui->widget_coalChart);
ui->widget_coalChart->setLayout(layout); ui->widget_coalChart->setLayout(layout);
@ -200,15 +204,14 @@ void CoalStatisticsChartWidget::initCustomCoalStatisticsBarChart() {
} }
} }
void CoalStatisticsChartWidget::initCustomPlotBarChart() { void CoalStatisticsChartWidget::initCustomPlotCoalStatisticsBarChart()
{
// 创建 QCustomPlot 图表 // 创建 QCustomPlot 图表
m_customPlot = m_customPlot = new QCustomPlot(ui->widget_coalChart);
new QCustomPlot(ui->widget_coalChart); // 假设 ui->widget_coalChart 是容器
m_customPlot->setBackground(Qt::transparent); // 设置背景透明 m_customPlot->setBackground(Qt::transparent); // 设置背景透明
// 设置布局 // 设置布局
QVBoxLayout *layout = QVBoxLayout* layout = static_cast<QVBoxLayout*>(ui->widget_coalChart->layout());
static_cast<QVBoxLayout *>(ui->widget_coalChart->layout());
if (!layout) { if (!layout) {
layout = new QVBoxLayout(ui->widget_coalChart); layout = new QVBoxLayout(ui->widget_coalChart);
ui->widget_coalChart->setLayout(layout); ui->widget_coalChart->setLayout(layout);
@ -226,8 +229,7 @@ void CoalStatisticsChartWidget::initCustomPlotBarChart() {
m_customPlot->xAxis->setTickPen(QPen(Qt::gray)); // 设置刻度线颜色 m_customPlot->xAxis->setTickPen(QPen(Qt::gray)); // 设置刻度线颜色
m_customPlot->xAxis->setSubTickPen(QPen(Qt::gray)); // 设置子刻度线颜色 m_customPlot->xAxis->setSubTickPen(QPen(Qt::gray)); // 设置子刻度线颜色
m_customPlot->xAxis->setTickLabelColor(Qt::gray); // 设置刻度标签颜色 m_customPlot->xAxis->setTickLabelColor(Qt::gray); // 设置刻度标签颜色
m_customPlot->xAxis->setTickLabelRotation( m_customPlot->xAxis->setTickLabelRotation(60); // 设置刻度标签的旋转角度,避免重叠
60); // 设置刻度标签的旋转角度,避免重叠
// 设置 Y 轴 // 设置 Y 轴
m_customPlot->yAxis->setLabel(""); m_customPlot->yAxis->setLabel("");
@ -238,8 +240,7 @@ void CoalStatisticsChartWidget::initCustomPlotBarChart() {
m_customPlot->yAxis->setRange(0, 100); // 设置 Y 轴的范围 m_customPlot->yAxis->setRange(0, 100); // 设置 Y 轴的范围
// 创建柱状图 // 创建柱状图
m_barGraph = m_barGraph = new QCPBars(m_customPlot->xAxis, m_customPlot->yAxis); // 创建柱状图对象
new QCPBars(m_customPlot->xAxis, m_customPlot->yAxis); // 创建柱状图对象
m_barGraph->setWidth(0.2); // 设置柱子的宽度 m_barGraph->setWidth(0.2); // 设置柱子的宽度
m_barGraph->setPen(QPen(Qt::transparent)); // 设置柱子没有边框 m_barGraph->setPen(QPen(Qt::transparent)); // 设置柱子没有边框
m_barGraph->setBrush(QColor(0, 120, 255)); // 设置柱子的颜色 m_barGraph->setBrush(QColor(0, 120, 255)); // 设置柱子的颜色
@ -253,7 +254,6 @@ void CoalStatisticsChartWidget::initCustomPlotBarChart() {
for (int i = 0; i < timeList.size(); ++i) { for (int i = 0; i < timeList.size(); ++i) {
ticks.append(timeList[i]); // 设置刻度的位置 ticks.append(timeList[i]); // 设置刻度的位置
// labels.append(timeList[i]); // 设置刻度标签(时间) // labels.append(timeList[i]); // 设置刻度标签(时间)
// m_customPlot->xAxis->setLabel(timeList[i]); // m_customPlot->xAxis->setLabel(timeList[i]);
} }
@ -266,7 +266,7 @@ void CoalStatisticsChartWidget::initCustomPlotBarChart() {
data.append(rand() % 100); // 使用随机数填充数据,实际应用中应替换为真实数据 data.append(rand() % 100); // 使用随机数填充数据,实际应用中应替换为真实数据
} }
m_barGraph->setData(ticks, data); // 设置柱状图的数据 // m_barGraph->setData(ticks, data); // 设置柱状图的数据
// 重新绘制图表 // 重新绘制图表
m_customPlot->replot(); m_customPlot->replot();
@ -274,13 +274,11 @@ void CoalStatisticsChartWidget::initCustomPlotBarChart() {
void CoalStatisticsChartWidget::getCoalStatisInfoByHttpRequest( void CoalStatisticsChartWidget::getCoalStatisInfoByHttpRequest(
const QString& beginTime, const QString& endTime, const QString& beginTime, const QString& endTime,
const QString &statisticUnit) { const QString& statisticUnit)
{
// 使用类成员变量 QNetworkAccessManager // 使用类成员变量 QNetworkAccessManager
QNetworkAccessManager* manager = new QNetworkAccessManager(this); QNetworkAccessManager* manager = new QNetworkAccessManager(this);
QString coalStaticUrl = m_systemSetting->value("coalStaticInterface/url").toString();
QString coalStaticUrl =
m_systemSetting->value("coalStaticInterface/url").toString();
// URL // URL
QUrl url(coalStaticUrl); QUrl url(coalStaticUrl);
@ -330,22 +328,28 @@ void CoalStatisticsChartWidget::getCoalStatisInfoByHttpRequest(
QJsonObject statisticUnitVolum = data["statistic_unit_volum"].toObject(); QJsonObject statisticUnitVolum = data["statistic_unit_volum"].toObject();
int statisticUnitVolumSize = statisticUnitVolum.count(); int statisticUnitVolumSize = statisticUnitVolum.count();
QString statisticUnitVolumSizeString = QString statisticUnitVolumSizeString = "查询结果数" + QString::number(statisticUnitVolumSize);
"查询结果数" + QString::number(statisticUnitVolumSize);
emit querySuccessInfo(statisticUnitVolumSizeString); emit querySuccessInfo(statisticUnitVolumSizeString);
QString totalVolumeString = "总吨数" + QString::number(m_toalValue); QString totalVolumeString = "总吨数" + QString::number(m_toalValue);
emit querySuccessInfo(totalVolumeString); emit querySuccessInfo(totalVolumeString);
ui->label_totalVolume->clear();
ui->label_totalVolume->setText(QString("煤量总计:%1吨").arg(m_toalValue));
m_volumeDataMap.clear();
// 遍历 statistic_unit_volum 中的键值对并存入 volumeDataMap // 遍历 statistic_unit_volum 中的键值对并存入 volumeDataMap
for (const QString& key : statisticUnitVolum.keys()) { for (const QString& key : statisticUnitVolum.keys()) {
double value = statisticUnitVolum.value(key).toDouble(); double value = statisticUnitVolum.value(key).toDouble();
m_volumeDataMap.insert(key, value); m_volumeDataMap.insert(key, value);
} }
qDebug() << "Code:" << code; // 更新查询的数据至图表
qDebug() << "Message:" << message; if (!m_volumeDataMap.isEmpty()) {
qDebug() << "Total Volume:" << m_toalValue; updateCoalStatisticsChart(m_volumeDataMap);
}
} else { } else {
// 处理错误 // 处理错误
QString errorString = reply->errorString(); QString errorString = reply->errorString();
@ -360,9 +364,8 @@ void CoalStatisticsChartWidget::getCoalStatisInfoByHttpRequest(
}); });
} }
void CoalStatisticsChartWidget::updateCoalStatisticsChart( void CoalStatisticsChartWidget::updateCoalStatisticsChart(const QMap<QString, double>& volumeDataMap)
const QMap<QString, double> &volumeDataMap) { {
qDebug() << "更新图表程序" << volumeDataMap.size();
// 清除旧数据 // 清除旧数据
m_series->clear(); m_series->clear();
@ -412,7 +415,6 @@ void CoalStatisticsChartWidget::updateCoalStatisticsChart(
// m_series->attachAxis(m_axisX); // m_series->attachAxis(m_axisX);
// 更新 Y 轴范围 // 更新 Y 轴范围
double maxValue = double maxValue = *std::max_element(volumeDataMap.begin(), volumeDataMap.end());
*std::max_element(volumeDataMap.begin(), volumeDataMap.end());
m_axisY->setRange(0, maxValue + 10); // 设置为最大值并留出余量 m_axisY->setRange(0, maxValue + 10); // 设置为最大值并留出余量
} }

View File

@ -48,8 +48,7 @@ private:
* @param formattedBeginTime * @param formattedBeginTime
* @param formattedEndTime * @param formattedEndTime
*/ */
void formatTimeRange(const QString &beginTimeStr, const QString &endTimeStr, void formatTimeRange(const QString& beginTimeStr, const QString& endTimeStr, QString& formattedBeginTime, QString& formattedEndTime);
QString &formattedBeginTime, QString &formattedEndTime);
/** /**
* @brief getLastSixFullHours * @brief getLastSixFullHours
@ -63,7 +62,10 @@ private:
*/ */
void initCustomCoalStatisticsBarChart(); void initCustomCoalStatisticsBarChart();
void initCustomPlotBarChart(); /**
* @brief initCustomPlotCoalStatisticsBarChart customPlot柱状图
*/
void initCustomPlotCoalStatisticsBarChart();
/** /**
* @brief getCoalStatisInfoByHttpRequest Http请求获取煤量统计信息 * @brief getCoalStatisInfoByHttpRequest Http请求获取煤量统计信息