#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); }