Russian Qt Forum
Июнь 13, 2024, 22:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPrintPreviewDialog - просмотр нескольких страниц, печать только одной  (Прочитано 7221 раз)
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();
}
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #1 : Апрель 15, 2014, 11:06 »

Типа пример:
Код:
/// Вывод на печать....
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;
}

Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
dmr
Гость
« Ответ #2 : Июнь 22, 2015, 15:28 »

Столкнулся с аналогичной проблемой. Показывается предварительный просмотр, там к примеру все страницы и печатает он также все, не смотря на то, что выбрать в QPrintDialog. Гуглил несколько дней вроде как официально предложено только во время создания предпросмотра сразу создавать только нужные страницы... Идиотизм какой-то, тогда зачем потом вообще открывать окно выбора... Не нашел ничего лучше как создать с помощью QPrintPreviewWidget, в который забросить все функции из исходников QPrintPreviewDialog, ну и немного подшаманить. После целого дня возни и мучения принтера заработало. Если кому нужно можете мне отписаться (ic_eta_d@mail.ru) пришлю свое творение. Я так понял что это дело сыровато у Qt...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 22.