#include "mainwindow.h" #include "ui_mainwindow.h" #include "view/beltspeedlinewidget.h" #include "view/coaldistributbarchartwidget.h" #include "view/coalstatisticschartwidget.h" #include #include MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); this->setWindowFlag(Qt::FramelessWindowHint); this->setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint); ui->widget_head->installEventFilter(this); m_systemSetting = new QSettings("system.ini", QSettings::IniFormat); this->setWindowTitle(m_systemSetting->value("system/name").toString()); calendarLoopPlay(); setSystemTitle(); setBeltWarnInfoTextEditStyle(); addcoalDistributChart(); addbeltSpeedChat(); addCoalStatisticsChart(); addCoalBeltVideo(); } MainWindow::~MainWindow() { delete ui; } bool MainWindow::eventFilter(QObject* watched, QEvent* event) { // 处理鼠标按下、释放和移动事件 if (watched == ui->widget_head) { QMouseEvent* mouseEvent = static_cast(event); if (mouseEvent->type() == QEvent::MouseButtonPress) { if (mouseEvent->button() == Qt::LeftButton) { m_mousePressed = true; // 启动拖拽 m_mousePoint = mouseEvent->globalPos() - this->pos(); this->setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint | Qt::Window | Qt::WindowStaysOnTopHint); this->show(); // 确保窗口显示 return true; } } else if (mouseEvent->type() == QEvent::MouseButtonRelease) { m_mousePressed = false; return true; } else if (mouseEvent->type() == QEvent::MouseMove) { if (m_mousePressed && (mouseEvent->buttons() & Qt::LeftButton)) { this->move(mouseEvent->globalPos() - m_mousePoint); // 每次移动时设置为最上方 this->setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint | Qt::Window | Qt::WindowStaysOnTopHint); this->show(); return true; } } } } void MainWindow::addBeltWarnInfoToTextEdit(const QString& consoleInfo) { qDebug() << consoleInfo; m_textEditConsoleInfo.append(consoleInfo); QDateTime startDateTime = QDateTime::currentDateTime(); QString formattedTime = startDateTime.toString("yyyy-MM-dd hh:mm:ss"); if (m_textEditConsoleInfo.isEmpty()) return; QString lastConsoleInfo = m_textEditConsoleInfo.last(); // qint64 timeDifferenceInMilliseconds = m_previousConsleInfoDateTime.secsTo(startDateTime); // if ((lastConsoleInfo == consoleInfo) && timeDifferenceInMilliseconds < 2) // return; QString consoleInfoResult = QStringLiteral("[%1]%2").arg(formattedTime).arg(consoleInfo); ui->textEdit_beltWarnInfo->append(consoleInfoResult); m_previousConsleInfoDateTime = QDateTime::currentDateTime(); } void MainWindow::on_pushButton_close_clicked() { this->close(); } void MainWindow::on_pushButton_max_clicked() { if (isFullScreen()) { this->showMaximized(); } else { this->showFullScreen(); } } void MainWindow::on_pushButton_min_clicked() { this->showMinimized(); } void MainWindow::calendarLoopPlay() { ui->label_calendar->clear(); QTimer* timer_calendar = new QTimer(this); connect(timer_calendar, &QTimer::timeout, this, [this]() { QDateTime time = QDateTime::currentDateTime(); QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); ui->label_calendar->setText(str); }); timer_calendar->start(1000); //每一秒溢出一次进入槽函数 } void MainWindow::setSystemTitle() { QString titleName = m_systemSetting->value("system/name").toString(); if (!titleName.isEmpty()) { ui->label_title->clear(); ui->label_title->setText(titleName); } } void MainWindow::setBeltWarnInfoTextEditStyle() { ui->textEdit_beltWarnInfo->document()->setMaximumBlockCount(100); ui->textEdit_beltWarnInfo->setReadOnly(true); ui->textEdit_beltWarnInfo->setTextInteractionFlags(Qt::NoTextInteraction); } void MainWindow::addcoalDistributChart() { // addBeltWarnInfoToTextEdit("添加煤流分布窗口成功!"); ui->textEdit_beltWarnInfo->append("添加煤流分布窗口成功!"); CoalDistributBarChartWidget* coalDistributBarChartWidget = new CoalDistributBarChartWidget(this); // 检查布局是否已设置 if (!ui->widget_coalDistributChart->layout()) { ui->widget_coalDistributChart->setLayout(new QVBoxLayout); } coalDistributBarChartWidget->setContentsMargins(0, 0, 0, 0); ui->widget_coalDistributChart->layout()->addWidget( coalDistributBarChartWidget); } void MainWindow::addbeltSpeedChat() { ui->textEdit_beltWarnInfo->append("添加皮带机速度曲线窗口成功!"); BeltSpeedLineWidget* beltSpeedLineWidget = new BeltSpeedLineWidget(this); // 检查布局是否已设置 if (!ui->widget_beltSpeedChart->layout()) { ui->widget_beltSpeedChart->setLayout(new QVBoxLayout); } beltSpeedLineWidget->setContentsMargins(0, 0, 0, 0); ui->widget_beltSpeedChart->layout()->addWidget(beltSpeedLineWidget); } void MainWindow::addCoalStatisticsChart() { ui->textEdit_beltWarnInfo->append("添加煤量统计窗口成功!"); CoalStatisticsChartWidget* coalStatisticsChartWidget = new CoalStatisticsChartWidget(this); // 检查布局是否已设置 if (!ui->widget_beltSpeedChart->layout()) { ui->widget_beltSpeedChart->setLayout(new QVBoxLayout); } coalStatisticsChartWidget->setContentsMargins(0, 0, 0, 0); ui->widget_coalStatisticsChart->layout()->addWidget( coalStatisticsChartWidget); connect(coalStatisticsChartWidget, &CoalStatisticsChartWidget::querySuccessInfo, this, &MainWindow::addBeltWarnInfoToTextEdit); } void MainWindow::addCoalBeltVideo() { // QString url = "https://stream7.iqilu.com/10339/upload_transcode/202002/18/" // "20200218114723HDu3hhxqIT.mp4"; // QString url = "rtsp://admin:1234qwer@192.168.80.82:554/Streaming/Channels/101"; QString url = m_systemSetting->value("camera/rtsp").toString(); ui->widget_beltVideo->setUrl(url); ui->widget_beltVideo->open(); }