#include "LogDetailWindow.h" #include #include #include #include #include #include #include #include #include LogDetailWindow::LogDetailWindow(const GeneralLogEntry &entry, QWidget *parent) : QDialog(parent) { setWindowTitle("Лог #" + QString::number(entry.id)); resize(700, 500); auto *layout = new QVBoxLayout(this); // Заголовок auto *headerLayout = new QHBoxLayout; auto *idLabel = new QLabel("#" + QString::number(entry.id) + ""); headerLayout->addWidget(idLabel); auto *levelLabel = new QLabel(entry.level); if (entry.level == "WARNING") levelLabel->setStyleSheet("color: orange; font-weight: bold;"); else if (entry.level == "CRITICAL" || entry.level == "FATAL") levelLabel->setStyleSheet("color: red; font-weight: bold;"); else levelLabel->setStyleSheet("color: gray;"); headerLayout->addWidget(levelLabel); auto *timeLabel = new QLabel(entry.timestamp.toLocalTime().toString("dd.MM.yyyy HH:mm:ss")); timeLabel->setStyleSheet("color: gray;"); headerLayout->addWidget(timeLabel); headerLayout->addStretch(); layout->addLayout(headerLayout); // Источник auto *sourceLabel = new QLabel("Источник: " + entry.source); sourceLabel->setWordWrap(true); sourceLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); layout->addWidget(sourceLabel); // Сообщение layout->addWidget(new QLabel("Сообщение:")); auto *messageEdit = new QTextEdit; messageEdit->setPlainText(entry.message); messageEdit->setReadOnly(true); layout->addWidget(messageEdit, 1); // Скриншот if (!entry.screenshot.isEmpty()) { QPixmap pixmap; pixmap.loadFromData(entry.screenshot); if (!pixmap.isNull()) { layout->addWidget(new QLabel("Скриншот:")); auto *imgLabel = new QLabel; imgLabel->setPixmap(pixmap.scaledToWidth( qMin(pixmap.width(), 600), Qt::SmoothTransformation)); imgLabel->setAlignment(Qt::AlignCenter); auto *scrollArea = new QScrollArea; scrollArea->setWidget(imgLabel); scrollArea->setWidgetResizable(false); scrollArea->setMaximumHeight(300); layout->addWidget(scrollArea); } } // Кнопки auto *btnLayout = new QHBoxLayout; auto *copyBtn = new QPushButton("Копировать"); copyBtn->setStyleSheet("background-color: #1565C0; color: white; padding: 4px 16px;"); connect(copyBtn, &QPushButton::clicked, this, [entry]() { const QString text = QString("ID: %1\nУровень: %2\nВремя: %3\nИсточник: %4\nСообщение: %5") .arg(entry.id) .arg(entry.level) .arg(entry.timestamp.toLocalTime().toString("dd.MM.yyyy HH:mm:ss")) .arg(entry.source) .arg(entry.message); QApplication::clipboard()->setText(text); }); btnLayout->addWidget(copyBtn); btnLayout->addStretch(); auto *closeBtn = new QPushButton("Закрыть"); connect(closeBtn, &QPushButton::clicked, this, &QDialog::close); btnLayout->addWidget(closeBtn); layout->addLayout(btnLayout); }