Newer
Older
ZXSSCJ / PhaseCompAcq / PhaseWindow.cpp
TAN YUE on 30 Sep 2021 4 KB 20210930 初始提交
#include "PhaseWindow.h"
#include "ui_PhaseWindow.h"

#include <QLabel>
#include <QPushButton>
#include <QTableView>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QHeaderView>

#include <iostream>

#include "common/utils/QKafkaUtil.h"

PhaseWindow::PhaseWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::PhaseWindow)
{
    ui->setupUi(this);

//    QKafkaUtil * kafkaTest = new QKafkaUtil(this);
//    kafkaTest->setBrokers("111.198.10.15:12502");
//    kafkaTest->setTopic("cppTest");
//    int kaf = kafkaTest->initKafkaConf();
//    std::cout << "init kafka cppTest: " << kaf << std::endl;

    QString portNames = SettingConfig::getInstance().PORT_NAMES;
    int baudRate = SettingConfig::getInstance().BAUD_RATE;
    QString devCodes = SettingConfig::getInstance().DEV_CODES;

    QStringList comDevList = portNames.split(",");
    QStringList devCodeList = devCodes.split(",");

    for (int i = 0; i < comDevList.size(); i++)
    {
        PhaseDevice * device = new PhaseDevice(this);

        //
        connect(device, &PhaseDevice::sendDataToDraw,
                this, &PhaseWindow::drawPhaseDataOnPage);

        device->setComName(comDevList.at(i));
        device->setBaudRate(baudRate);

        device->setDevCode(devCodeList.at(i));

        this->deviceList.append(device);

        device->initSerialPort();
        device->startWork();
    }

    for (int i = 0; i < this->deviceList.size(); i++)
    {
        QWidget * devWidget5 = new QWidget(this->ui->stackedWidget);

        this->ui->stackedWidget->addWidget(devWidget5);

        this->devWidgetList.append(devWidget5);

        // 创建设备的widget
        this->generateWidgetForDevice(devCodeList.at(i), i);
    }
}

PhaseWindow::~PhaseWindow()
{
    delete ui;
}

void PhaseWindow::drawPhaseDataOnPage(PhaseDataDto * phaseData)
{
    // 1. 判断数据属于哪个设备,显示在不同的widget上

    // 2. 循环设置各个tableView
    QList<QStandardItemModel *> devChannels = this->tableModelList.at(2); // 暂时写死
    for (int i = 0; i < phaseData->channelData.size(); i++)
    {
        if (phaseData->channelActive.at(i).toInt() == 1)
        {
            QList<QStandardItem *> row;
            QStandardItem * item = 0;
            QStandardItem * item2 = 0;
            item = new QStandardItem(QString("%1").arg(phaseData->timestamp.mid(11, 12)));
            item2 = new QStandardItem(QString("%1").arg(phaseData->channelData.at(i)));

            row.append(item);
            row.append(item2);

            QStandardItemModel * model;
            model = devChannels.at(i);
            if (model->rowCount() >= 60)
            {
                model->removeRows(0, model->rowCount());
            }

            model->insertRow(0, row);
        }
    }
}

void PhaseWindow::generateWidgetForDevice(QString devCode, int index)
{
    // 顶部切换widget
    QWidget * switchWidget = new QWidget(this->devWidgetList.at(index));
    switchWidget->setGeometry(0, 0, 1024, 50);

    // 显示数据的区域
    QWidget * gridWidget = new QWidget(this->devWidgetList.at(index));
    gridWidget->setGeometry(0, 50, 1024, 670);

    // 顶部水平布局,用于排布按钮
    QHBoxLayout * hLayout = new QHBoxLayout(switchWidget);

    // 文本
    QLabel * label = new QLabel(switchWidget);
    label->setText("设备编号:" + devCode);
    label->setFont(QFont("微软雅黑", 12));
    hLayout->addWidget(label);

    // 按钮
    for (int i = 0; i < this->deviceList.size(); i++)
    {
        QPushButton * butt5 = new QPushButton(this->deviceList.at(i)->getDevCode());
        hLayout->addWidget(butt5);

        connect(butt5, &QPushButton::clicked, [=](){
            this->ui->stackedWidget->setCurrentIndex(i);
        });
    }

    // Grid布局
    QGridLayout * gridLayout = new QGridLayout(gridWidget);
    gridLayout->setSpacing(10);

    QList<QStandardItemModel *> channelModelList;
    QStringList labels = QObject::trUtf8("时间,相差").simplified().split(",");

    for (int i = 0; i < 16; i++)
    {
        QTableView * channelTable = new QTableView(gridWidget);
        QStandardItemModel * model = new QStandardItemModel(channelTable);

        model->setHorizontalHeaderLabels(labels);

        channelTable->setModel(model);

        gridLayout->addWidget(channelTable, i / 4, i % 4);

        channelTable->verticalHeader()->hide();
        channelTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
        channelTable->scrollToBottom();

        channelModelList.append(model);
    }

    this->tableModelList.append(channelModelList);
}