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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Переопределение события  (Прочитано 4583 раз)
ruzik
Гость
« : Февраль 13, 2011, 22:00 »

Здравствуйте, вот возник вопрос как можно сделать следующее:
У меня есть событие QLineEdit::mouseMoveEvent, есть класс наследуемый от QLineEdit, и в нем я хочу переопределить функцию mouseMoveEvent, что бы она выполняла нужные мне действия, но я так же хочу сделать так что бы можно было дальше переопределять эту функцию, а действия по событию еще выполнялись
Записан
shirushizo
Гость
« Ответ #1 : Февраль 13, 2011, 22:19 »

Вы про это?
Код:
class myLineEdit : public QLineEdit
{
...
protected:
virtual void mouseMoveEvent( QMouseEvent *event);
...
}

void myLineEdit::mouseMoveEvent( QMouseEvent *event)
{
...
QLineEvent::mouseMoveEvent(event);
}
...

class myLineEditExt : public myLineEdit
{
...
protected:
virtual void mouseMoveEvent( QMouseEvent *event);
...
}

void myLineEditExt::mouseMoveEvent( QMouseEvent *event)
{
...
myLineEdit ::mouseMoveEvent(event);
}
« Последнее редактирование: Февраль 14, 2011, 19:52 от shirushizo » Записан
ruzik
Гость
« Ответ #2 : Февраль 13, 2011, 22:30 »

Да, и позвольте задать еще 2 вопроса, они скорее про С++
Как я понял virtual "накладывает" определения функций
И 2:
void myLineEdit ::mouseMoveEvent( QMouseEvent *event)
{
...
myLineEditExt ::mouseMoveEvent(event);
}
А зачем писать myLineEditExt ::mouseMoveEvent(event); в событии, к чему это?
Записан
Disaron
Гость
« Ответ #3 : Февраль 13, 2011, 22:38 »

Да, и позвольте задать еще 2 вопроса, они скорее про С++
Как я понял virtual "накладывает" определения функций
И 2:
void myLineEdit ::mouseMoveEvent( QMouseEvent *event)
{
...
myLineEditExt ::mouseMoveEvent(event);
}
А зачем писать myLineEditExt ::mouseMoveEvent(event); в событии, к чему это?
По первому утверждению: Вам надо немного почитать матчасть по С++.
По второму: при переопределении метода, метод предка не выполняется, указанная строка myLineEditExt::mouseMoveEvent(event) как раз вызывает метод предка, чтобы отработало все с ним связанное.
Записан
ruzik
Гость
« Ответ #4 : Февраль 13, 2011, 22:43 »

Насколько я помню virtual ставиться когда функция будет переопределена, просто подумал немножко не то
P.S. спасибо за помощь
Записан
Disaron
Гость
« Ответ #5 : Февраль 13, 2011, 22:55 »

Насколько я помню virtual ставиться когда функция будет переопределена, просто подумал немножко не то
P.S. спасибо за помощь
Кстати автор немного ошибся, там должно быть:
Код:
void myLineEditExt::mouseMoveEvent(QMouseEvent *event)
{
...
myLineEdit::mouseMoveEvent(event);
}
метод объявляется виртуальным, если предполагается его переопределение в потомке. Это основные концепции, почитайте про ООП в принципе, не обязательно о С++.
Записан
shirushizo
Гость
« Ответ #6 : Февраль 14, 2011, 19:52 »

Кстати автор немного ошибся, там должно быть:
...
Каюсь  - переставил местами родителя и потомка, исправил.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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