Files
eUi/src/launcher/GUI/uiModule/uiModule_runCommand.h
T
2025-11-14 00:35:50 +08:00

148 lines
5.7 KiB
C++

#include <qdialog.h>
#include <global.h>
#include <nlohmannJson.hpp>
#include <qlayout.h>
#include <frontendSignalHub.h>
#include <qlistview.h>
#include <qstandarditemmodel.h>
class plcValueViewer :public QWidget{
public:
QFont font1 = QFont("微软雅黑", 12, QFont::Bold);
QFont font2 = QFont("微软雅黑", 10, QFont::Bold);
QFont font3 = QFont("微软雅黑", 6, QFont::Bold);
plcValueViewer(const QString& groupNameIN,
const std::vector<std::pair<QString, int>>& viewerNameAndAddress,
QMap<int, std::vector<QLabel*>>& plcViwerLineedits)
:groupName(groupNameIN){
QLabel* groupNameLabel = new QLabel(groupNameIN);
groupNameLabel->setFont(font1);
groupNameLabel->setStyleSheet("color: white;");
//groupNameLabel->setPalette(palette);
layout->addWidget(groupNameLabel);
for (auto& data : viewerNameAndAddress) {
plcViwerLineedits[data.second].push_back(addViewer(data.first));
}
widget->setMaximumHeight(800);
}
QLabel* addViewer(const QString& viewerName) {
//QPalette palette;
//palette.setColor(QPalette::WindowText, Qt::white);
map.insert(groupName + viewerName ,new QLabel("*"));
auto label = map[groupName + viewerName];
label->setFont(font2);
label->setStyleSheet("color: white;");
//label->setPalette(palette);
auto textLabel = new QLabel(viewerName);
textLabel->setFont(font3);
textLabel->setStyleSheet("color: white;");
//textLabel->setPalette(palette);
QVBoxLayout* viewerLayout = new QVBoxLayout();
viewerLayout->addWidget(label,Qt::AlignCenter);
viewerLayout->addWidget(textLabel, Qt::AlignCenter);
layout->addLayout(viewerLayout);
return label;
}
QString groupName = "";
QWidget* widget = new QWidget();
QHBoxLayout* layout = new QHBoxLayout(widget);
QMap<QString, QLabel*> map;
};
class runCommandWidget : public QDialog {
Q_OBJECT
public:
explicit runCommandWidget(QWidget* parent = nullptr)
: QDialog(parent) {
this->setWindowTitle(TR("Execute Command"));
this->setObjectName("runCommandWidget");
this->setStyleSheet(QString("QDialog#runCommandWidget {background-color: rgb(%1);border: 2px solid #000000;border-radius: 6px;}").arg(sColor_Blue));
btnWidgets = new QListWidget(this);
btnWidgets->setStyleSheet("background: transparent;");
// 使用 QListView 包裹 plcValueViewer
plcValueViewerList = new QListView(this);
plcValueViewerList->setStyleSheet("background: transparent;");
plcValueViewerList->setEditTriggers(QAbstractItemView::NoEditTriggers);
plcValueViewerList->setSelectionMode(QAbstractItemView::NoSelection);
plcValueViewerList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
plcValueViewerList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
plcValueViewerList->setResizeMode(QListView::Adjust);
plcValueViewerModel = new QStandardItemModel(plcValueViewerList);
plcValueViewerList->setModel(plcValueViewerModel);
QGridLayout* layout = new QGridLayout(this);
layout->addWidget(btnWidgets, 0, 0);
layout->addWidget(plcValueViewerList, 0, 1);
this->setFixedSize(sizeX, sizeY);
}
signals:
void excuteCommandPreset(QString uuid);
public slots:
void addBtn(const QString& btnName, const QString& tip, const QString& uuid) {
QListWidgetItem* item = new QListWidgetItem(btnWidgets);
btnWidgets->addItem(item);
fancyButtonText* funcBtn = new fancyButtonText(btnName,0,0, tip);
btnWidgets->setItemWidget(item, funcBtn);
connect(funcBtn, &fancyButtonText::clicked, this, [this, uuid]() {
QMessageBox::StandardButton reply;
reply = QMessageBox::question(
this, // parent
TR("Confirm"), // title
TR("Are you sure you want to execute this action?"), // content
QMessageBox::Yes | QMessageBox::No // buttons
);
if (reply == QMessageBox::Yes) {
emit excuteCommandPreset(uuid);
}
});
}
void addPlcValueViewer(QString groupName, std::vector<std::pair<QString, int>> viewerNameAndAddress) {
auto viewer = new plcValueViewer(groupName, viewerNameAndAddress, plcViwerLineedits);
// 添加到 QListView 中
QStandardItem* item = new QStandardItem();
// 根据内部 widget 的 sizeHint 设置行高
item->setSizeHint(viewer->widget->sizeHint());
plcValueViewerModel->appendRow(item);
QModelIndex index = plcValueViewerModel->index(plcValueViewerModel->rowCount() - 1, 0);
plcValueViewerList->setIndexWidget(index, viewer->widget);
}
void refreshPlcValueViewer(int address, QString value) {
for (auto& lineedit : plcViwerLineedits[address]) {
lineedit->setText(value);
}
}
protected:
//重写showEvent,使窗口显示在屏幕中心
void showEvent(QShowEvent* event) override {
QWidget::showEvent(event);
//获取屏幕的几何信息
QScreen* screen = QGuiApplication::primaryScreen();
QRect screenGeometry = screen->geometry();
int x = (screenGeometry.width() - this->width()) / 2;
int y = (screenGeometry.height() - this->height()) / 2;
this->move(x, y);
}
private:
int sizeX = 1000, sizeY = 720;
QListWidget* btnWidgets;
// 用 QListView + 模型 替代原来的垂直布局
QListView* plcValueViewerList;
QStandardItemModel* plcValueViewerModel;
QMap<int, std::vector<QLabel*>>plcViwerLineedits;
};
#pragma once