Я хочу визуализировать информацию из QTableWidget в pdf файл, используя QPrinter + QPainter, но у меня проблема с масштабированием при попытке сделать это, они немного больше, чем в qtablewidget (~ 10%). Как я могу решить эту проблему? Я думаю, что проблема в масштабных коэффициентах для QPainter. Спасибо за ответы.
PS: я не могу использовать QWidget :: Render
Виджет и изображения в формате PDF:
Виджет
PDF
Исходный код для преобразования:
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFileName("");
printer.setPageSize(QPrinter::A4);
printer.setFullPage(true);
QPainter painter(&printer);
const auto logicalDeviceDpiX = printer.logicalDpiX();
const auto logicalDeviceDpiY = printer.logicalDpiY();
auto screen = QApplication::screens().at(0);
const auto logicalScreenDpiX = screen->logicalDotsPerInchX();
const auto logicalScreenDpiY = screen->logicalDotsPerInchY();
const auto scaleWidth = logicalDeviceDpiX / logicalScreenDpiX;
const auto scaleHeight = logicalDeviceDpiY / logicalScreenDpiY;
painter.scale(scaleWidth, scaleHeight);
qDebug() << "Logical: ";
qDebug() << "Printer dpix: " << printer.logicalDpiX();
qDebug() << "Printer dpiy: " << printer.logicalDpiY();
qDebug() << "Physical";
qDebug() << "Printer dpix: " << printer.physicalDpiX();
qDebug() << "Printer dpiy: " << printer.physicalDpiY();
qDebug() << "Logical: ";
qDebug() << "Table widget dpix: " << tableWidget->logicalDpiX();
qDebug() << "Table widget dpiy: " << tableWidget->logicalDpiY();
qDebug() << "Physical";
qDebug() << "Table widget dpix: " << tableWidget->physicalDpiX();
qDebug() << "Table widget dpiy: " << tableWidget->physicalDpiY();
auto rowOffset = 0.0f;
auto columnOffset = 0.0f;
QPen pen(Qt::black);
pen.setWidth(0);
painter.setPen(pen);
for (auto rowIndex = 0; rowIndex < rowCount; ++rowIndex) {
auto rowHeight = tableWidget->rowHeight(rowIndex);
columnOffset = 0.0f;
for (auto columnIndex = 0; columnIndex < columnCount; ++columnIndex) {
auto columnWidth = tableWidget->columnWidth(columnIndex);
QRectF cellRect(columnOffset, rowOffset, columnWidth, rowHeight);
painter.drawRect(cellRect);
QFont font("Times", 12);
QFontMetrics metrics(font);
font.setPixelSize(metrics.height());
painter.setFont(font);
painter.drawText(cellRect, tableWidget->item(rowIndex, columnIndex)->text(), Qt::AlignHCenter | Qt::AlignVCenter);
columnOffset += columnWidth;
}
rowOffset += rowHeight;
}