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

View File

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

View File

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