Всем доброго времени суток.
Пишу приложение на Qt, которое кроме всего прочего должно печатать талоны со штрих-кодами.
Для этого использую термопринтер.
В настройках принтера делаю следующее:
pPrinter->setOrientation (QPrinter::Portrait);
pPrinter->setColorMode (QPrinter::GrayScale);
pPrinter->setPageSize (QPrinter::A7);
pPrinter->setFullPage (true);
Размер бумаги A7 - 74х105 мм (т.к. термопринтер печатает на бумаге 80х120 мм).
Есть QWidget, из которого я и печатаю данные:
void Printer::draw(QPaintDevice *ppd, const QString &info, const QString &ticketStr) {
QPainter painter(ppd);
QRect r(painter.viewport());
painter.setPen(Qt::black);
painter.setFont (QFont ("Helvetica", 10, QFont::Normal));
painter.drawText (r, Qt::AlignLeft | Qt::AlignTop | Qt::TextWrapAnywhere, info);
QString barcode = strToCode128 (ticketStr);
painter.setFont (QFont ("Code 128", 50, QFont::Normal));
painter.drawText (r, Qt::AlignHCenter | Qt::AlignBottom, barcode);
}
Когда я задаю положение элементов через флаги Qt (как это сделано выше), содержимое виджета масштабируется под размер страницы (A7) и нормально печатается.
Однако мне бы хотелось форматировать страницу чуть более гибко. Пытаюсь задать координаты какого-либо элемента в процентах от размера r:
QPoint p (r.height ()*0.9, r.width ()*0.2);
painter.drawText (p, barcode);
P.S.: Еще меня смущает то, что размер r = QRect(0,0 3500x4967)