Qt paintEvent() ненормально срабатывает

Я новичок в Qt.

Итак, у меня есть MainWindow с QSlider и QPixmap. Я переопределил paintEvent( QPaintEvent* event ) и

connect( slider, SIGNAL(valueChanged(int)), this, SLOT(centerChange(int)) );

со слотом:

void MainWindow::centerChange(int value)
{
    center = value;
    update();
}

Поэтому я хотел перекрасить растровое изображение, только если значение ползунка изменилось. Но я замечаю, что каждый раз, когда я навожу или убираю мышь с ползунка, срабатывает перерисовка. Почему это происходит?

Спасибо.


person Mike Shaw    schedule 06.03.2014    source источник


Ответы (3)


Событие Paint может быть запущено в любое время базовой системой рисования Qt. Вы не должны предполагать, что событие рисования может быть вызвано только вами. Вам нужно изменить логику в вашем приложении.

person DmitryARN    schedule 06.03.2014
comment
В порядке. Но если я хочу ограничить перерисовку, чтобы улучшить производительность. Разве это не необходимо? Или люди просто так не делают? - person Mike Shaw; 06.03.2014
comment
Но если я хочу ограничить перерисовку, не делайте этого, система рисования Qt довольно хороша (но, конечно, не идеальна). В Linux вы можете попробовать растровый графический движок, он намного быстрее родного. - person DmitryARN; 06.03.2014
comment
В порядке. Спасибо за Ваш ответ. - person Mike Shaw; 06.03.2014

Документация говорит:

Событие рисования — это запрос на перерисовку всего или части виджета. Это может произойти по одной из следующих причин:

  • была вызвана функция repaint() или update(),
  • виджет был скрыт, а теперь открыт, или
  • много других причин.

(выделено мной). В частности, базовая ОС может инициировать событие перерисовки, когда захочет.

person Shoe    schedule 06.03.2014

Исходя из ваших требований, не переустанавливайте paintEvent тогда. Просто выполните QPixmap обновление, когда значение ползунка изменилось.

person Community    schedule 06.03.2014