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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отрендерить QFrame в QPixmap.  (Прочитано 5435 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Декабрь 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()) );

Так вообще падает...  В замешательстве

ЧЯДНТ?
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Декабрь 21, 2017, 15:52 »

А так ?
Код
C++ (Qt)
QPainter painter(&pm);
render(&painter);
 
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Декабрь 21, 2017, 17:04 »

А так ?
Код
C++ (Qt)
QPainter painter(&pm);
render(&painter);
 

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

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #3 : Декабрь 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 получить... Буду думать...
« Последнее редактирование: Декабрь 21, 2017, 21:13 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Декабрь 21, 2017, 23:04 »

Всё. pm = grab(QRect(QPoint(0,0),size())); в другом методе перед перерисовкой - и нормально работает.

Записан

2^7-1 == 127, задумайтесь...
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Декабрь 22, 2017, 12:40 »

grab медленный, см. это (первый абзац) если надо сграббить что-то у виджета.
Записан

ArchLinux x86_64 / Win10 64 bit
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Декабрь 22, 2017, 12:51 »

grab медленный
пофик, мне надо с частотой 15 кадров в секунду грабить небольшой прямоугольник 140х110, скорости хватает даже на старом медленном планшете с Android
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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