Название: QPrintPreviewDialog - просмотр нескольких страниц, печать только одной
Отправлено: aliks-os от Апрель 15, 2014, 10:42
Вызывается предварительный просмотр перед печатью, формируются листы. На предварительной просмотре видим все ОК. В меню предварительного просмотра нажимаем кнопку Печать. Появляется диалог печати. Выставляем Печатать к примеру только 2 страницу. Печатаются все страницы! Это баг? Или надо делать дополнительную обработку чтобы печатались только выбранные/указанные страницы? void UPrintTextEditor::onExec(){ QPrinter printer(QPrinter::ScreenResolution); printer.setPageSize(QPrinter::A4); printer.setOrientation(QPrinter::Landscape); printer.setPageOrder(QPrinter::FirstPageFirst);
QPrintPreviewDialog preview(&printer); connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(onPrint(QPrinter*))); preview.exec(); }
void UPrintTextEditor::onPrint(QPrinter *printer){ QPainter painter; painter.begin(printer);
for(int i = 1; i <= 3; i++){ painter.drawText(QRectF(10.0, 10.0, 100.0, 100.0), QString::number(i) + ". Page"); if(i < 3) printer->newPage(); }
painter.end(); }
Название: Re: QPrintPreviewDialog - просмотр нескольких страниц, печать только одной
Отправлено: panAlexey от Апрель 15, 2014, 11:06
Типа пример (http://code.google.com/p/unnstudioreport/source/browse/trunk/Report/uoReportDoc.cpp): /// Вывод на печать.... bool uoReportDoc::printDoc(const bool updPrintSourse, QWidget* qwidg) { bool retVal = false;
QPrinter* pPrinter = uoReportManager::instance()->printer(); if(!pPrinter){ qWarning() << QString::fromUtf8("Принтер не создан!"); return retVal; }
uorAresList* list = m_pageList; if(updPrintSourse){ list = getPageList(); } if (!list) return retVal;
if (!setupPrinter(*pPrinter, qwidg)) return retVal;
int pageNomFrom = 0, pageNomTo = 0; QPrinter::PrintRange prnRange = pPrinter->printRange(); if (prnRange == QPrinter::PageRange) { pageNomFrom = pPrinter->fromPage(); pageNomTo = pPrinter->toPage(); } qreal scaleFactor = m_pagesSetings->scale(); qDebug() << QString("bool uoReportDoc::printDoc scaleFactor = %1").arg(scaleFactor);
QPainter painter; painter.begin(pPrinter); painter.scale(scaleFactor,scaleFactor); bool firstPage = true; uoReportDrawHelper* drawHelper = new uoReportDrawHelper(this); drawHelper->initDrawInstruments();
uorReportAreaBase aBase;
uorReportPrintArea* area = NULL; int pageGurNo = 0; uorAresListCnstIter iter = list->constBegin(); while (iter != list->constEnd()){ pageGurNo += 1; if (prnRange == QPrinter::PageRange) { if (!(pageNomFrom<=pageGurNo && pageNomTo>=pageGurNo)){ iter++; continue; } } if (!firstPage) pPrinter->newPage();
area = *iter; aBase = (*area); aBase.m_areaType = 2; drawHelper->drawDataArea(painter, aBase);
iter++; firstPage = false;
}
return true; }
Название: Re: QPrintPreviewDialog - просмотр нескольких страниц, печать только одной
Отправлено: dmr от Июнь 22, 2015, 15:28
Столкнулся с аналогичной проблемой. Показывается предварительный просмотр, там к примеру все страницы и печатает он также все, не смотря на то, что выбрать в QPrintDialog. Гуглил несколько дней вроде как официально предложено только во время создания предпросмотра сразу создавать только нужные страницы... Идиотизм какой-то, тогда зачем потом вообще открывать окно выбора... Не нашел ничего лучше как создать с помощью QPrintPreviewWidget, в который забросить все функции из исходников QPrintPreviewDialog, ну и немного подшаманить. После целого дня возни и мучения принтера заработало. Если кому нужно можете мне отписаться (ic_eta_d@mail.ru) пришлю свое творение. Я так понял что это дело сыровато у Qt...
|