crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

11 страниц V  < 1 2 3 4 > »   
Ответить в данную темуНачать новую тему
> QPaintEvent, installEventFilter, QPainter, Overpainting
Litkevich Yuriy
  опции профиля:
сообщение 26.5.2009, 13:11
Сообщение #11


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 26.5.2009, 16:56) *
В другом методе например, вызываемым внутри eventFilter'a.
ну это и будет в фильтре событий.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.5.2009, 13:23
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 26.5.2009, 14:11) *
Цитата(SABROG @ 26.5.2009, 16:56) *
В другом методе например, вызываемым внутри eventFilter'a.
ну это и будет в фильтре событий.

Всё, что я хочу сказать, это то, что на методе paintEvent свет не сошелся при отрисовке, главное создать правильные условия/событие.

Но мы отклонились от темы, рисовать не вопрос. void QWidget::update ( const QRect & rect ) - не знаю как его можно прикрутить к фильтру событий, это надо его как-то вызвать на ребенке, чтобы он и линию не затер и себя смог отрисовать, врятли это возможно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.5.2009, 16:00
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


SABROG, для случая не окна, глянь-ка сюда

и ещё

вот как делают троли:
bool HoverPoints::eventFilter(QObject *object, QEvent *event)
{
    if (object == m_widget && m_enabled) {
        switch (event->type()) {
        
        case QEvent::Paint:
        {
            QWidget *that_widget = m_widget;        // <---
            m_widget = 0;                            // <---
            QApplication::sendEvent(object, event);    // <---
            m_widget = that_widget;                    // <---
            paintPoints();
#ifdef QT_OPENGL_SUPPORT
            ArthurFrame *af = qobject_cast<ArthurFrame *>(that_widget);
            if (af && af->usesOpenGL())
                af->glWidget()->swapBuffers();
#endif
            return true;
        }
        default:
            break;
        }
    }

    return false;
}
интересные места выделены в коментариях
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.5.2009, 16:24
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


До этих мест я добрался уже давно, но никак не могу понять в чем разница. Если ключ в QApplication::sendEvent(object, event);, то почему у меня это приводит к рекурсии и как следствие к крашу...
---
Тэкс похоже этот m_widget что-то типа моего флага:

if (object == m_widget && m_enabled)


Сообщение отредактировал SABROG - 26.5.2009, 16:25
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 26.5.2009, 16:24
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 26.5.2009, 17:00) *
m_widget

что это за виджет ? полагаю член класса(принадлежит HoverPoints).
зачем его на время посылки события устанавливать в 0 а потом тут же возвращать прежнее значение?
странно....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.5.2009, 16:35
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Похоже получается.



Как я понял sendEvent вызывает цикл eventFilter еще раз и таким образом заставляет нарисоваться виджетам. А нулевой m_widget (в моем случае обычный flag типа bool) нужен, чтобы прервать бесконечный цикл. Значит я все-таки рыл в правильную сторону.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.5.2009, 16:42
Сообщение #17


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 26.5.2009, 20:35) *
Похоже получается.
т.е. эти чёрные линии ты нарисовал поверх виджета в фильтре событий?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.5.2009, 16:46
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 26.5.2009, 17:42) *
Цитата(SABROG @ 26.5.2009, 20:35) *
Похоже получается.
т.е. эти чёрные линии ты нарисовал поверх виджета в фильтре событий?


Первая линия рисуется для centralWidget(), вторая для его чайлдов, в данном случае это только QGroupBox, т.к. надо еще писать функцию рекурсии, чтобы пройтись по всему дереву, а у меня пока руки не дошли.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.5.2009, 16:48
Сообщение #19


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а можешь тестовый примерчик вылочить, с минимумом виджетов. Найду время тоже побалуюсь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.5.2009, 16:50
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 26.5.2009, 17:48) *
а можешь тестовый примерчик вылочить, с минимумом виджетов. Найду время тоже побалуюсь.

Попробую. Можно будет потом в faq добавить, а то даже на QtCentre все уверенны, что это невозможно :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

11 страниц V  < 1 2 3 4 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


17 чел. читают эту тему (гостей: 17, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.9.2024, 2:28