#include "AccountWindow.h" #include #include #include #include #include #include "TransactionWindow.h" #include "dao/AccountDAO.h" #include "dao/DeviceDAO.h" AccountWindow::AccountWindow(QWidget *parent): QWidget(parent) { auto *mainLayout = new QVBoxLayout(this); // Скролл-область auto *scrollArea = new QScrollArea(this); scrollArea->setWidgetResizable(true); // Виджет-контейнер, в котором будет layout с таблицами и лейблами auto *contentWidget = new QWidget; auto *layout = new QVBoxLayout(contentWidget); // Убираем отступы и рамку contentWidget->setContentsMargins(0, 0, 0, 0); // Убираем отступы layout->setContentsMargins(0, 0, 0, 0); // Убираем отступы у layout scrollArea->setStyleSheet("border: none;"); // Убираем рамку layout->setAlignment(Qt::AlignTop); QList devices = DeviceDAO::getAllDevices(false); for (int i = 0; i < devices.size(); ++i) { DeviceInfo device = devices[i]; QList accounts = AccountDAO::getAccounts(device.id, "rshb"); // Текст перед первой таблицей QString title = QString("%1 [%2] | %3").arg(device.name, device.id, device.status); QLabel *label = new QLabel(title, this); layout->addWidget(label); if (accounts.length() > 0) { QTableWidget *tableWidget = new QTableWidget(this); tableWidget->setStyleSheet("QTableWidget {" "border: 1px solid grey;" "}"); tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); connect(tableWidget, &QTableWidget::itemDoubleClicked, this, &AccountWindow::onItemDoubleClicked); tableWidget->setRowCount(accounts.length()); // Устанавливаем количество строк tableWidget->setColumnCount(5); // Устанавливаем количество столбцов tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); tableWidget->setHorizontalHeaderLabels({"Карта", "Сумма", "Время обновления", "Описание", "Статус"}); tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter); int totalHeight = tableWidget->horizontalHeader()->height(); for (int k = 0; k < accounts.size(); ++k) { AccountInfo account = accounts[k]; QTableWidgetItem *item = new QTableWidgetItem("*" + account.lastNumbers); item->setData(Qt::UserRole, account.id); tableWidget->setItem(k, 0, item); tableWidget->setItem(k, 1, new QTableWidgetItem(QString::number(account.amount))); tableWidget->setItem(k, 2, new QTableWidgetItem(account.updateTime.toString("dd.MM.yyyy HH:mm:ss"))); tableWidget->setItem(k, 3, new QTableWidgetItem(account.description)); tableWidget->setItem(k, 4, new QTableWidgetItem(accountStatusToString(account.status))); totalHeight += tableWidget->rowHeight(k); } tableWidget->setFixedHeight(totalHeight + 2); layout->addWidget(tableWidget); } if (i < devices.size() - 1) { QFrame *separator = new QFrame(this); separator->setFrameShape(QFrame::VLine); separator->setStyleSheet("background-color: black;"); // Цвет разделителя separator->setFixedHeight(1); separator->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); layout->addWidget(separator); } } // Добавим вертикальный Spacer в конец, чтобы прокручиваемая область не растягивала контент QSpacerItem *spacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); layout->addItem(spacer); contentWidget->setLayout(layout); scrollArea->setWidget(contentWidget); mainLayout->addWidget(scrollArea); setLayout(mainLayout); setWindowTitle("Таблица устройств"); } void AccountWindow::onItemDoubleClicked(QTableWidgetItem *item) { int column = item->column(); if (column == 0) { int accountId = item->data(Qt::UserRole).toInt(); qDebug() << accountId; TransactionWindow *detailWindow = new TransactionWindow(accountId, this); detailWindow->exec(); // Ожидаем закрытия окна } }