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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPrinter. Автоматическое разбиение на страницы  (Прочитано 3812 раз)
MrDron
Гость
« : Ноябрь 08, 2017, 21:28 »

Здравствуйте! А можно ли как-то сделать автоматическую разбивку на листы (например A4) при рисовании QPainter'ом?
Дело в том, что есть много длинных вертикальных графиков, которые выгружаются в PDF и получается один длинный лист. newPage() не подходит.
Возможно какой-нибудь отдельной консольной софтиной под винду.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

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


Просмотр профиля
« Ответ #1 : Ноябрь 09, 2017, 10:56 »

Делал внутри своей софтины. Соответственно сначала рубка на листы идет, а уже потом принтуем:
Код:
/// Вывод на печать....
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 || !list->count())    /// Nagumanov 14.05.2010 Добавлена проверка на размер листа
        return retVal;

if (!setupPrinter(*pPrinter, qwidg))
return true;   /// Nagumanov 14.05.2010 Возвращать true, даже если отказались от печати

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);

    uoPainter painter;
    painter.begin(pPrinter);
    painter.scale(scaleFactor,scaleFactor);
    bool firstPage = true;
uoReportDrawHelper* drawHelper = new uoReportDrawHelper(this);
drawHelper->initDrawInstruments();
drawHelper->setDirectDraw(false); // Если используется пиксмап кешер, то текст почему-то печатается на черном фоне белым..
bool usePC = usePictCasher();
setUsePictCasher(false);

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;

}
setUsePictCasher(usePC);
delete drawHelper;
return true;
}
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
MrDron
Гость
« Ответ #2 : Ноябрь 09, 2017, 11:37 »

Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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