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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Переопределение keyPressEvent  (Прочитано 11439 раз)
Mashko
Гость
« : Февраль 09, 2010, 20:23 »

Подскажите, пожалуйста, решение проблемы!
Есть модуль. В его .cpp вынесены функции, в .h - их прототипы и объявлен статический объект:
Код:
static QTextEdit* textWidget;
 
Для этого объекта нужно переопределить метод keyPressEvent. При моей попытке делать это так:
Код:
//.h 
void textWidget::keyPressEvent(QKeyEvent *event);
//.cpp
void textWidget::keyPressEvent(QKeyEvent *event)
{
   ...
}
Получаю кучу ошибок:
Код:
1.error C2825: 'textWidget': must be a class or namespace when followed by '::'
2.error C2039: 'KeyPressEvent': is not a member of "global  namespace"
3.error C2146: syntax error: missing ';' before identifer 'keyPressEvent'
4.error C2182: 'textWidget': illegal use of type 'void'

Может, кто знает правильное решение
Записан
BRE
Гость
« Ответ #1 : Февраль 09, 2010, 20:35 »

Хорошо бы, что-то по С++ почитать.  Подмигивающий
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Февраль 09, 2010, 20:56 »

>>нужно переопределить метод keyPressEvent
чтобы переопределить метод какого-то класса, нужно создать наследника (унаследоваться) от этого класса и в новом просто набрать этот метод заново.
Записан

Юра.
BRE
Гость
« Ответ #3 : Февраль 09, 2010, 21:07 »

Самое главное, что нельзя переопределять метод у конкретного объекта, а можно только у класса.
Записан
Mashko
Гость
« Ответ #4 : Февраль 09, 2010, 21:38 »

Самое главное, что нельзя переопределять метод у конкретного объекта, а можно только у класса.


Так может тогда переопределять сразу у QTextEdit, от которого наследовался textWidget?
Записан
BRE
Гость
« Ответ #5 : Февраль 09, 2010, 21:45 »

Так может тогда переопределять сразу у QTextEdit, от которого наследовался textWidget?

mytextedit.h
Код
C++ (Qt)
class MyTextEdit : public QTextEdit
{
protected:
void keyPressEvent ( QKeyEvent * event );
};
 

mytextedit.cpp
Код
C++ (Qt)
void MyTextEdit::keyPressEvent ( QKeyEvent * event )
{
...
 
// При необходимости вызываем метод предка
// QTextEdit::keyPressEvent( event );
}
 
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Февраль 09, 2010, 23:32 »

>>Так может тогда переопределять сразу у QTextEdit, от которого наследовался textWidget?
в приведённом тобою коде:
static QTextEdit* textWidget;
ты просто объявил переменную-указатель textWidget на тип QTextEdit. А не наследовался. См. пример, который привёл BRE. Там именно наследование (т.е. создаётся новый класс MyTextEdit на основе класса QTextEdit)
Записан

Юра.
Mashko
Гость
« Ответ #7 : Февраль 10, 2010, 18:43 »

Я женского роду, ну да ладно  Веселый
Так вот, не мучаясь долго переопределила метод keyPressEvent() для всего QTextEdit. Нажатие, например, на Enter ловится, но при этом почему-то пропала возможность ввода текста в textWidget  Непонимающий
Код:
void QTextEdit::keyPressEvent(QKeyEvent* event)
{
    switch(event->key())
    {
           case Qt::Key_Return:
                setText("ready");
           break;
           default:
               QWidget::keyPressEvent(event);
     }

}

Записан
BRE
Гость
« Ответ #8 : Февраль 10, 2010, 18:55 »

Написал же - предка.  Подмигивающий
Код:
...
           default:
               QTextEdit::keyPressEvent(event);
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Февраль 10, 2010, 21:32 »

>>Написал же - предка.
Дак она в исходник Qt забралась

П.С. Ожидаю море постов с описанием неадекватного поведения Qt-виджетов
Записан

Юра.
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #10 : Февраль 10, 2010, 23:24 »

оффтоп т.к. по теме даже сказать нечего. Думаю эта тема разовьется старниц на 40 - а все от того что кто-то решил что C++ можно изучить не читая ни одной книги...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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