#include "PhaseWindow.h" #include "ui_PhaseWindow.h" #include <iostream> #include <QTimer> #include <QDateTime> #include <QLabel> #include <QGroupBox> #include <QLineEdit> #include <QPushButton> #include <QHBoxLayout> #include <QDesktopWidget> #include <QThread> #include <ChannelItem.h> PhaseWindow::PhaseWindow(QWidget *parent) : QWidget(parent), ui(new Ui::PhaseWindow) { ui->setupUi(this); // 无边框 this->setWindowFlags(Qt::FramelessWindowHint); // 窗口大小为占满一屏 QRect screenRect = QApplication::desktop()->screenGeometry(); resize(screenRect.width(), screenRect.height()); // 将窗口移动到左上角 move(0, 0); ui->exitButt->move(screenRect.width() - 80, 10); ui->minButt->move(screenRect.width() - 140, 10); ui->settingButt->move(screenRect.width() - 200, 10); ui->line->setGeometry(0, 89, screenRect.width(), 1); ui->pointsList->setGeometry(250,30,screenRect.width()-500,40); ui->labelsList->setGeometry(250,60,screenRect.width()-500,30); // 设置主体区域的大小和位置 ui->scrollArea->setGeometry(0, 90, screenRect.width(), screenRect.height() - 90); ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); // httpReq = new HttpRequestController(this); // // 1. 获取访问接口需要的token // int retCode = this->initHttpToken(); // if (retCode != 200) // { // QMessageBox::information(this, "错误", "获取http请求的token失败,程序即将退出"); // QTimer::singleShot(1000, qApp, SLOT(quit())); // } // 2. 获取字典值:设备类型 // retCode = this->initDictDeviceTypes(); this->generateWidgetForDevice(); } PhaseWindow::~PhaseWindow() { delete ui; } void PhaseWindow::drawPhaseDataOnPage(PhaseDataDto * phaseData) { // 当前显示的设备编号 // QString currentDevCode = ui->devSelect->currentData().toString(); // 如果不是当前设备的帧,直接返回 // if (phaseData->devCode != currentDevCode) // { // return; // } // 更新所有通道BOX的值 for (int i = 0; i < phaseData->channelActive.size(); i++) { // 获取对应的通道BOX QGroupBox * channelBox = (QGroupBox *)ui->scrollContents->children().at(i + 1); // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(phaseData->timestamp); ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 s").arg(phaseData->channelDataStr.at(i))); ((QLineEdit *)channelBox->children().at(6))->setText(phaseData->frameId); ((QLabel *)channelBox->children().at(7))->setText(phaseData->channelActive.at(i) == "1" ? "有效" : "无效"); } } void PhaseWindow::generateWidgetForDevice() { // 获取设备数据 int channelNum = 16; QRect screenRect = QApplication::desktop()->screenGeometry(); ui->scrollContents->setGeometry(0, 90, screenRect.width(), channelNum * 170); QVBoxLayout * layout = new QVBoxLayout(ui->scrollContents); const QFont labelFont("微软雅黑", 10); for (int i = 0; i < channelNum; i++) { QGroupBox * group = new QGroupBox(ui->scrollContents); group->setTitle(QString("通道 - %1").arg(i + 1)); group->setFont(QFont("微软雅黑", 12)); group->setGeometry(20, i * 160 + 10, screenRect.width() - 40, 160); QHBoxLayout * vbox = new QHBoxLayout(group); ChannelItem *widget=new ChannelItem(); widget->setGeometry(10, 0, screenRect.width() - 60, 160); vbox->addWidget(widget); group->setLayout(vbox); layout->addWidget(group); } } int PhaseWindow::initHttpToken() { QJsonObject response = httpReq->getTokenByClientId(SettingConfig::getInstance().CLIENT_ID, SettingConfig::getInstance().APP_KEY); return response.find("code")->toInt(); } int PhaseWindow::initDictDeviceTypes() { QJsonObject response = httpReq->initDictDeviceType(); return response.find("code")->toInt(); } QJsonObject PhaseWindow::initDeviceList() { QJsonObject response = httpReq->initDeviceList("比相仪"); return response; } void PhaseWindow::on_minButt_clicked() { setWindowState(Qt::WindowMinimized | windowState()); } void PhaseWindow::on_exitButt_clicked() { QApplication::exit(0); }