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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Не отображается наследник QLineEdit  (Прочитано 2571 раз)
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« : Июнь 16, 2010, 22:59 »

Возникла необходимость сделать производный класс от qlineEdit'а, переопределив ему события нажатия клавиш. До этого никогда не занимался наследованием qt-шных виджетов.

Создаю наследника QLineEdit, переопределяю ему
Код
C++ (Qt)
protected:
   virtual bool event (QEvent *event);
   virtual void keyPressEvent(QKeyEvent *event);
   virtual void keyReleaseEvent(QKeyEvent *event);  

И обеъкт моего класса после этоо перестаёт отображаться. Вместо строки ввода на форме (на которую добавлен объект класса MyEdit) ничего не рисуется. Но при этом если подвести курсор мыши в область предполагаемого размещения объекта -- курсор мыши изменит вид на "текстовый".

Что нужно сделать чтобы  мой виджет рисовался нормально? Как-то переопределить paintEvent или что-то ещё?

тестовый проект во вложении.

 Qt 4.6.3, Linux x86_64 , GCC 4.5.0
« Последнее редактирование: Июнь 16, 2010, 23:39 от DOOMer » Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
EhTemka
Гость
« Ответ #1 : Июнь 16, 2010, 23:27 »

Привет.

Вам нужно либо написать свой обработчик event, либо вызывать внутри переопределённой, функцию родителя

Код
C++ (Qt)
bool MyEdit::event(QEvent *event)
{
return QLineEdit::event(event);
}

потому что в этом методе обрабатываются все события, приходящие данному виджету, в том числе и на отрисовку.

Еще (для более осмысленной отрисовки) желательно ваш MyEdit расположить на каком-нибудь лайоуте

Код
C++ (Qt)
#include <QtGui/QVBoxLayout>
 
Widget::Widget(QWidget *parent) :
   QWidget(parent),
   ui(new Ui::Widget)
{
   ui->setupUi(this);
   testEdit = new MyEdit(this);
   testEdit->setText("Test Button");
 
   QVBoxLayout *lay = new QVBoxLayout(this);
   lay->addWidget(testEdit);
}
 
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #2 : Июнь 16, 2010, 23:39 »

Ясно. Спасибо.
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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