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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Граббить содержимое виджета по его изменению.  (Прочитано 13422 раз)
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #15 : Февраль 14, 2017, 13:10 »

Да, с атрибутом я погорячился.
Достаточно, как посоветовал Igors всего-лишь поймать UpdateRequest:
Код
C++ (Qt)
bool event( QEvent* e )
{
if( e->type() == QEvent::UpdateRequest )
{
QElapsedTimer et;
et.start();
m_target->setPixmap(grab());
qDebug() << "elapsed:" << et.elapsed();
}
return QWidget::event( e );
}
 
Т.е. никакие таймеры и сигналы не нужны.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Февраль 14, 2017, 13:57 »

А сами то пробовали?
А что Вас смущает в этом стандартном/банальном приеме?

Каким же образом содрать?
В Qt 5 вроде можно и так
Код
C++ (Qt)
QImage * GetImage( QWidget * widget )
{
QBackingStore * store = widget->backingStore();
Q_ASSERT(store);
 
QPaintDevice * pdev = store->paintDevice();
return dynamic_cast<QImage *> (pdev);
}
 
У меня то же самое но через приватные хедеры (для более ранних Qt), этот код рабочий
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #17 : Февраль 14, 2017, 14:55 »

Всем спасибо (я пока не пробовал то что вы предложили),

остановился пока на своем варианте с прорисовкой всех контролов вручную через
стили (благо там у меня всего две кнопочки надо отрисовать).. Улыбающийся

Сначала рисую в пиксмапу все что нужно, а потом рисую из этой пиксмапы
в виджет, а также передаю эту пиксмапу в целевой виджет.


 
Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #18 : Февраль 14, 2017, 15:32 »

UPD: Попробовал с QEvent::UpdateRequest и всроде оно работает (по крайней мере под windows), спасибо!  Улыбающийся

Но немного медленнее чем с "прямым" рисованием контролов ручками.
Записан

ArchLinux x86_64 / Win10 64 bit
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #19 : Февраль 14, 2017, 16:57 »

Но немного медленнее чем с "прямым" рисованием контролов ручками.
Дык за всё нужно платить. Особенно за пиксмапы, которые хранятся на стороне граф.подсистемы.
Попробуй вместо QPixmap задействовать QPicture:
Код
C++ (Qt)
QPicture pic;
render( &pic );
m_target->setPicture( pic );
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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