LINUX.ORG.RU

QPrinter + QPainter динамическое формирование документа

 ,


0

2

Всем доброго времени суток.

Пишу приложение на 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)

★★

Ответ на: комментарий от nikitos

Спасибо! Уже разобрался. Выставил paperSize и стал формировать вывод через QTextDocument.

solovey ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.