#include "CounterWindow.h" #include "ui_CounterWindow.h" #include <iostream> #include <QTimer> #include <QDateTime> #include <QLabel> #include <QPushButton> #include <QTableView> #include <QGridLayout> #include <QHBoxLayout> #include <QHeaderView> #include <QDesktopWidget> CounterWindow::CounterWindow(QWidget *parent) : QWidget(parent), ui(new Ui::CounterWindow) { ui->setupUi(this); QRect screenRect = QApplication::desktop()->screenGeometry(); resize(screenRect.width(), 700); 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++) { CounterDevice * device = new CounterDevice(this); // connect(device, &CounterDevice::sendDataToDraw, this, &CounterWindow::drawCounterDataOnPage); 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 * devWidget = new QWidget(this->ui->stackedWidget); ui->stackedWidget->addWidget(devWidget); devWidgetList.append(devWidget); this->generateWidgetForDevice(devCodeList.at(i), i); } // timer = new QTimer(this); // timer->start(1000 * 10); } CounterWindow::~CounterWindow() { delete ui; } void CounterWindow::mockOneFrame() { qlonglong deviceId = 9101; QKafkaUtil * kafkaUtil = new QKafkaUtil(this); kafkaUtil->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); kafkaUtil->setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); kafkaUtil->createProducer(); QDateTime now = QDateTime::currentDateTime(); QString frameId = QString("%1").arg(now.toSecsSinceEpoch() % 10000); qlonglong ts = now.toMSecsSinceEpoch(); for (int i = 0; i < 16; i++) { CounterDataDto channelDataDto; channelDataDto.devCode = deviceId; channelDataDto.frameId = frameId; channelDataDto.channelData = qrand() % 400; channelDataDto.channelRefId = 0; channelDataDto.channelId = i; channelDataDto.milisecond = ts; channelDataDto.timestamp = now.toString("yyyyMMddHHmmssZZZ"); QJsonObject dtoJson = channelDataDto.toJSON(); dtoJson.insert("clientId", SettingConfig::getInstance().CLIENT_ID); dtoJson.insert("deviceId", deviceId); std::cout << QString(QJsonDocument(dtoJson).toJson(QJsonDocument::Compact)).toStdString() << std::endl; kafkaUtil->produceMessage(QString(QJsonDocument(dtoJson).toJson(QJsonDocument::Compact))); } } void CounterWindow::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("时间,clock").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); } void CounterWindow::drawCounterDataOnPage(CounterDataDto * counterData) { // 1. 判断数据属于哪个设备,显示在不同的widget上 // 2. 循环设置各个tableView QList<QStandardItemModel *> devChannels = this->tableModelList.at(0); // 暂时写死 QList<QStandardItem *> row; QStandardItem * itemTm = 0; QStandardItem * itemData = 0; itemTm = new QStandardItem(QString("%1").arg(counterData->timestamp.mid(11, 12))); itemData = new QStandardItem(QString("%1").arg(counterData->channelData)); row.append(itemTm); row.append(itemData); QStandardItemModel * model; model = devChannels.at(counterData->channelId - 1); if (model->rowCount() >= 20) { model->removeRows(0, model->rowCount()); } model->insertRow(0, row); // for (int i = 0; i < counterData->channelData.size(); i++) // { // if (counterData->channelActive.at(i).toInt() == 1) // { // QList<QStandardItem *> row; // QStandardItem * item = 0; // QStandardItem * item2 = 0; // item = new QStandardItem(QString("%1").arg(counterData->timestamp.mid(11, 12))); // item2 = new QStandardItem(QString("%1").arg(counterData->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); // } // } }