Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ruzik от Февраль 13, 2011, 22:00



Название: Переопределение события
Отправлено: ruzik от Февраль 13, 2011, 22:00
Здравствуйте, вот возник вопрос как можно сделать следующее:
У меня есть событие QLineEdit::mouseMoveEvent, есть класс наследуемый от QLineEdit, и в нем я хочу переопределить функцию mouseMoveEvent, что бы она выполняла нужные мне действия, но я так же хочу сделать так что бы можно было дальше переопределять эту функцию, а действия по событию еще выполнялись


Название: Re: Переопределение события
Отправлено: shirushizo от Февраль 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);
}


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


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


Название: Re: Переопределение события
Отправлено: ruzik от Февраль 13, 2011, 22:43
Насколько я помню virtual ставиться когда функция будет переопределена, просто подумал немножко не то
P.S. спасибо за помощь


Название: Re: Переопределение события
Отправлено: Disaron от Февраль 13, 2011, 22:55
Насколько я помню virtual ставиться когда функция будет переопределена, просто подумал немножко не то
P.S. спасибо за помощь
Кстати автор немного ошибся, там должно быть:
Код:
void myLineEditExt::mouseMoveEvent(QMouseEvent *event)
{
...
myLineEdit::mouseMoveEvent(event);
}
метод объявляется виртуальным, если предполагается его переопределение в потомке. Это основные концепции, почитайте про ООП в принципе, не обязательно о С++.


Название: Re: Переопределение события
Отправлено: shirushizo от Февраль 14, 2011, 19:52
Кстати автор немного ошибся, там должно быть:
...
Каюсь  - переставил местами родителя и потомка, исправил.