Update row count constants in VedomostTableModel and PDFController for improved PDF export layout. Adjusted background color handling for table rows and enhanced page number display in headers.
This commit is contained in:
@@ -68,16 +68,28 @@ QVariant VedomostTableModel::data(const QModelIndex &index, int role) const
|
||||
}
|
||||
|
||||
if (role == Qt::BackgroundRole) {
|
||||
// Проверяем переполнение ячейки (используем приблизительную ширину колонки)
|
||||
// Приблизительные ширины колонок для Vedomost (в пикселях)
|
||||
static const qreal columnWidths[] = {200, 150, 200, 150, 150, 80, 80, 80, 80, 150}; // 10 колонок
|
||||
qreal columnWidth = (index.column() < 10) ? columnWidths[index.column()] : 150;
|
||||
|
||||
// Проверяем переполнение ячейки (используем информацию из PDF)
|
||||
QPair<int, int> cellKey(index.row(), index.column());
|
||||
if (m_overflowCells.contains(cellKey)) {
|
||||
// Подсвечиваем красным, если ячейка переполнена (помечена из PDF)
|
||||
return QBrush(QColor(255, 200, 200)); // Светло-красный
|
||||
if (row.isHeader) {
|
||||
return QBrush(QColor(200, 200, 200));
|
||||
} else {
|
||||
// Проверяем переполнение ячейки (используем приблизительную ширину колонки)
|
||||
// Приблизительные ширины колонок для Vedomost (в пикселях)
|
||||
static const qreal columnWidths[] = {200, 150, 200, 150, 150, 80, 80, 80, 80, 150}; // 10 колонок
|
||||
qreal columnWidth = (index.column() < 10) ? columnWidths[index.column()] : 150;
|
||||
|
||||
// Проверяем переполнение ячейки (используем информацию из PDF)
|
||||
QPair<int, int> cellKey(index.row(), index.column());
|
||||
if (m_overflowCells.contains(cellKey)) {
|
||||
// Подсвечиваем красным, если ячейка переполнена (помечена из PDF)
|
||||
return QBrush(QColor(255, 200, 200)); // Светло-красный
|
||||
}
|
||||
|
||||
// Чередуем оттенки фона для разных страниц
|
||||
// Нечетные страницы - светло-голубой, четные - светло-желтый
|
||||
if (row.pageNumber % 2 == 1) {
|
||||
return QBrush(QColor(240, 248, 255)); // AliceBlue - для нечетных страниц
|
||||
} else {
|
||||
return QBrush(QColor(255, 255, 240)); // Ivory - для четных страниц
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,8 +186,13 @@ QVariant VedomostTableModel::headerData(int section, Qt::Orientation orientation
|
||||
return DEFAULT_HEADERS.at(section);
|
||||
}
|
||||
} else {
|
||||
// Вертикальные заголовки - номера строк
|
||||
return section + 1;
|
||||
// Вертикальные заголовки - номера строк с указанием страницы
|
||||
if (section < m_rows.size()) {
|
||||
const VedomostRowData &row = m_rows[section];
|
||||
return QString("%1 (стр. %2)").arg(section + 1).arg(row.pageNumber);
|
||||
} else {
|
||||
return section + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
@@ -1122,31 +1139,48 @@ bool VedomostTableModel::isRowHeader(int row) const
|
||||
|
||||
void VedomostTableModel::updatePageNumbers()
|
||||
{
|
||||
qDebug() << "VedomostTableModel::updatePageNumbers: Обновляем номера страниц";
|
||||
|
||||
int currentRow = 0;
|
||||
int currentPage = 1;
|
||||
int rowsOnCurrentPage = 0;
|
||||
|
||||
for (int i = 0; i < m_rows.size(); ++i) {
|
||||
VedomostRowData &row = m_rows[i];
|
||||
|
||||
if (i == 0) {
|
||||
// Первая страница
|
||||
if (rowsOnCurrentPage >= ROWS_PER_FIRST_PAGE) {
|
||||
currentPage++;
|
||||
rowsOnCurrentPage = 0;
|
||||
}
|
||||
} else {
|
||||
// Остальные страницы
|
||||
if (rowsOnCurrentPage >= ROWS_PER_OTHER_PAGE) {
|
||||
currentPage++;
|
||||
rowsOnCurrentPage = 0;
|
||||
}
|
||||
// Определяем, сколько строк помещается на текущей странице
|
||||
int maxRowsOnPage = (currentPage == 1) ? ROWS_PER_FIRST_PAGE : ROWS_PER_OTHER_PAGE;
|
||||
|
||||
// Если текущая страница заполнена, переходим на следующую
|
||||
if (rowsOnCurrentPage >= maxRowsOnPage) {
|
||||
currentPage++;
|
||||
rowsOnCurrentPage = 0;
|
||||
maxRowsOnPage = ROWS_PER_OTHER_PAGE; // Начиная со второй страницы
|
||||
}
|
||||
|
||||
// Устанавливаем номер страницы для строки
|
||||
row.pageNumber = currentPage;
|
||||
row.rowNumber = i + 1;
|
||||
row.name.pageNumber = currentPage;
|
||||
row.productCode.pageNumber = currentPage;
|
||||
row.documentCode.pageNumber = currentPage;
|
||||
row.supplier.pageNumber = currentPage;
|
||||
row.whereUsed.pageNumber = currentPage;
|
||||
row.quantityPerItem.pageNumber = currentPage;
|
||||
row.quantityInSet.pageNumber = currentPage;
|
||||
row.quantityForReg.pageNumber = currentPage;
|
||||
row.totalQuantity.pageNumber = currentPage;
|
||||
row.note.pageNumber = currentPage;
|
||||
|
||||
// Увеличиваем счетчик строк на текущей странице
|
||||
rowsOnCurrentPage++;
|
||||
currentRow++;
|
||||
|
||||
qDebug() << "VedomostTableModel::updatePageNumbers: Строка" << i << "на странице" << currentPage
|
||||
<< "(строк на странице:" << rowsOnCurrentPage << "/" << maxRowsOnPage << ")";
|
||||
}
|
||||
|
||||
qDebug() << "VedomostTableModel::updatePageNumbers: Обновление завершено, всего страниц:" << currentPage;
|
||||
|
||||
// Уведомляем UI об изменении данных для обновления отображения страниц
|
||||
if (!m_rows.isEmpty()) {
|
||||
emit dataChanged(index(0, 0), index(m_rows.size() - 1, COLUMN_COUNT - 1),
|
||||
|
||||
Reference in New Issue
Block a user