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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Замещение paintEvent(QPaintEvent *event)  (Прочитано 4826 раз)
andi
Гость
« : Октябрь 15, 2007, 13:09 »

Здрасте всем.
Есть некоторая форма, на которой находится фрейм. В начальный момент времени он скрыт ( hide() ).
При нажатии спец кнопки, он появляется (вызов show() ), а потом вызывается repaint().
В paintEvent() содержится код который на этом фрейме отображает пару pixmap.
Проблема:
При появлении frame-а он пустой. Хотя paintEvent() вызывается (вывожу отладочное сообщение).
Картинка появляется только если я например, мышкой переведу фокус на другое приложение. Причем это приложение должно перерисовать хотя бы край окна моего приложения. Либо сдвинуть какое либо приложение.
Складывается ощущение, как будто нужно дернуть какой-нидь "flush" для отображения изменений.
У кого какие будут мысли?
Записан
QCasper
Гость
« Ответ #1 : Октябрь 15, 2007, 14:20 »

Покажите код paintEvent.
Записан
andi
Гость
« Ответ #2 : Октябрь 16, 2007, 05:16 »

Код:
void TestForm3::paintEvent(QPaintEvent *event)
{
QPainter painter(f_chem_rcho);
QPixmap rcho = QPixmap::fromMimeSource("mr3.png");;
QPixmap mr = QPixmap::fromMimeSource("mr_2.png");
painter.setClipRegion(QRegion(0,0,f_chem_rcho->width(),f_chem_rcho->height(),QRegion::Rectangle),QPainter::CoordDevice);
painter.drawPixmap(0,0,rcho);
bool flag = true;
int x = 0;
int y = 100;
switch(currentMR){
case 0: flag = false; break;
case 1: x = 94; y = 19; break; // rm1
case 2: x = 22; y = 18;  break;
case 3: x = 93; y = 132;  break;
case 4: x = 49; y = 82; break;
case 5: x = 224; y = 29;  break;
}
if(flag){
painter.setClipRegion(QRegion(x,y,62,62,QRegion::Rectangle),QPainter::CoordDevice);
painter.drawPixmap(x,y,mr);
}
}
Записан
andi
Гость
« Ответ #3 : Октябрь 16, 2007, 06:12 »

В процессе экспериментирования обнаружилась такое решение:
Код:
connect(pb_show,SIGNAL( toggled ( bool)),this,SLOT(handlerShow(bool)));
....
void TestHardForm::handlerShow(bool on){
if(on){
f_rcho->show();
qApp->processEvents();
repaint();
}
else{
f_rcho->hide();
}
}

В таком виде при нажатии кнопки изображение появляется. Если убрать qApp->... то изображение только после переключения окон.
Записан
Вячеслав
Гость
« Ответ #4 : Октябрь 16, 2007, 09:25 »

После отработки цикла сообщений Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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