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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTable::eventFilter  (Прочитано 6004 раз)
CBapor
Гость
« : Февраль 14, 2005, 11:12 »

Высмотрел в http://qt.osdn.org.ua/look-qa.html
совет, как нарисовать на заголовках столбцах что либо:

Код:

bool MyTable::eventFilter(QObject *targetObj, QEvent *event)
    {
        if (targetObj == (QObject *)horizontalHeader() &&
   event->type() == QEvent::Paint)
{
            QPainter painter(horizontalHeader());
            // код отрисовки
paint.setPen( Qt::blue );
paint.drawLine( 0,0, 5,5);

            return true;
        } else
            return QTable::eventFilter(targetObj, event);
    }


Но этот код не работает, потому что условие в if ниразу не выполняется.

Пример работающего кода
Код:

bool MyTable::eventFilter(QObject *targetObj, QEvent *event)
{
    QPainter paint(horizontalHeader());
    // код отрисовки
    paint.setPen( Qt::blue );
    paint.drawLine( 0,0, 5,5);
    return QTable::eventFilter(targetObj, event);
}


Вопрос - что неправильно в условии в первом примере?
Может все оставить как есть во втором примере?

p.s. MyTable - простое наследование от QTable - без каких либо хитростей. Конструкторы просто дублируют базовые.
Код:

class MyTable : public QTable
{      
public:
  MyTable(QWidget *parent = 0, const char *name = 0);
  MyTable( int numRows, int numCols, QWidget * parent = 0, const char * name = 0 );  

  bool MyTable::eventFilter(QObject *targetObj, QEvent *event);
};
Записан
Lom
Гость
« Ответ #1 : Февраль 14, 2005, 22:19 »

Создается такое впечатление что надо приделать eventFilter не к таблице, а к самому заголовку при помощи installEventFilter

Второй вариант хоть и работает, но полохой, т.к. перерисовка заголовка происходит при любом вызове eventFilter, а это может произойти и тогда когда не нужно рисовать
Записан
CBapor
Гость
« Ответ #2 : Февраль 16, 2005, 09:53 »

Цитата: "Lom"
Создается такое впечатление что надо приделать eventFilter не к таблице, а к самому заголовку при помощи installEventFilter

попробывал такой подход - результат странный.
рисует линию только если мышкой мимо провести, изначально никаких доп. рисунков.

Цитата: "Lom"

Второй вариант хоть и работает, но полохой, т.к. перерисовка заголовка происходит при любом вызове eventFilter, а это может произойти и тогда когда не нужно рисовать

Тогда так Улыбающийся
Код:

bool MyTable::eventFilter(QObject *targetObj, QEvent *event)
{
   if (event->type() == QEvent::Paint)
   {            
   // код отрисовки
QPainter paint(horizontalHeader());
paint.setPen( Qt::blue );
paint.drawLine( 0,0, 5,5);
    }
    return QTable::eventFilter(targetObj, event);
}

рисует когда надо хоть что-то перерисовать. Улыбающийся
Записан
CBapor
Гость
« Ответ #3 : Февраль 16, 2005, 10:50 »

Код:

bool MyTable::eventFilter(QObject *targetObj, QEvent *event)
{
   if (event->type() == QEvent::Paint)
   {            
   // код отрисовки
QPainter paint(horizontalHeader());
paint.setPen( Qt::blue );
paint.drawLine( 0,0, 5,5);
    }
    return QTable::eventFilter(targetObj, event);
}

Вот , незадача,  при нажатии заголовка (выделение столбца) свой фрагмент пропадает.
Грустный
Какая-то хитрая диспетчиризация событий.

Такая же фигня и при реализации через installEventFilter Грустный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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