Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Гурман от Декабрь 21, 2017, 00:25



Название: Отрендерить QFrame в QPixmap.
Отправлено: Гурман от Декабрь 21, 2017, 00:25
Qt 5.6, правда надо сказать - Android версия. Надо схватить картинку c безрамочной QFrame в QPixmap. И потом на ней рисовать с помощью QPainter. Вроде бы всё просто. Внутри paintEvent() класса, который наследует QFrame:
Код:
    QPixmap pm( size() );
    pm.fill(Qt::black); // без этого появляется цветной шум
    render( &pm );
    QPainter p(&pm);
....

Нифига. Чёрное поле. Наличие цветного шума без очистки пиксмапа говорит о том, что render(&pm) ничего не делает, не изменяет содержимое картинки. На всякий случай попытался указать размеры:

Код:
    render( &pm, QPoint(0,0), QRegion(0,0,width(),height()) );

Так вообще падает...  :-\

ЧЯДНТ?


Название: Re: Отрендерить QFrame в QPixmap.
Отправлено: Igors от Декабрь 21, 2017, 15:52
А так ?
Код
C++ (Qt)
QPainter painter(&pm);
render(&painter);
 


Название: Re: Отрендерить QFrame в QPixmap.
Отправлено: Гурман от Декабрь 21, 2017, 17:04
А так ?
Код
C++ (Qt)
QPainter painter(&pm);
render(&painter);
 

именно рендерить painter, не pixmap? не пробовал, по логике это как-то... хотя...


Название: Re: Отрендерить QFrame в QPixmap.
Отправлено: Гурман от Декабрь 21, 2017, 21:08
А так ?
Код
C++ (Qt)
QPainter painter(&pm);
render(&painter);
 

Код:
    QPixmap pm( size() );
    QPainter p(&pm);
    render( &p );

Цитировать
(null):0 ((null)): QWidget::repaint: Recursive repaint detected

и потом падает. Очевидно render() вызывает paintEvent() - появляется рекурсия. А мне надо именно в paintEvent содержимое этого QFrame получить... Буду думать...


Название: Re: Отрендерить QFrame в QPixmap.
Отправлено: Гурман от Декабрь 21, 2017, 23:04
Всё. pm = grab(QRect(QPoint(0,0),size())); в другом методе перед перерисовкой - и нормально работает.



Название: Re: Отрендерить QFrame в QPixmap.
Отправлено: kuzulis от Декабрь 22, 2017, 12:40
grab медленный, см. это (http://www.prog.org.ru/topic_31796_0.html) (первый абзац) если надо сграббить что-то у виджета.


Название: Re: Отрендерить QFrame в QPixmap.
Отправлено: Гурман от Декабрь 22, 2017, 12:51
grab медленный
пофик, мне надо с частотой 15 кадров в секунду грабить небольшой прямоугольник 140х110, скорости хватает даже на старом медленном планшете с Android