crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Распечатать QGLWidget, куда копать?
menand
  опции профиля:
сообщение 6.3.2012, 14:13
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 31.1.2012
Пользователь №: 3171

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день. Есть QGLWidget в котором отображается результат рисования OpenGL. Как послать это дело на принтер?.. В том виде в каком оно на экране (виджете) с масштабированием под страницу (лучше через Принт-Диалог)?

Как я понимаю сам по себе qglwidget печать не поддерживает - а как тогда быть?..

ЗЫ с печатью раньше вообще не сталкивался..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 6.3.2012, 14:17
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


посмотри в сторону void QWidget::render ( QPaintDevice * target, const QPoint & targetOffset = QPoint(), const QRegion & sourceRegion = QRegion(), RenderFlags renderFlags = RenderFlags( DrawWindowBackground | DrawChildren ) )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
menand
  опции профиля:
сообщение 15.3.2012, 15:05
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 31.1.2012
Пользователь №: 3171

Спасибо сказали: 0 раз(а)




Репутация:   0  


смотрел.. нашёл несколько примеров.. в итоге:

void GLWidget::printGLprint(QPrinter *printer){

    QImage image = grabFrameBuffer();

    QRect rectPrint; //Размер бумаги
    rectPrint = printer->pageRect();


    QSize imageSize = image.size();
    imageSize.scale(rectPrint.size(), Qt::KeepAspectRatio);


    QPainter painter;
    painter.begin(printer);


    painter.setViewport(0, 0, imageSize.width(), imageSize.height());
    painter.setWindow(image.rect());
    //painter.drawImage(rectPrint.x(),rectPrint.y(),image);
    painter.drawImage(0,0,image);
    painter.end();



вот это более-менее печатает.. правда с низким разрешением (как у экрана) и не по центру страницы.. что не есть хорошо..

пробовал через renderPixmap вместо граббуфера - в результате пустой лист.. также и пробовал рендер на пиксмап делать - тоже ничего хорошего..

так и не могу заставить печать в хорошем разрешении по центру листа..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 10:13