Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: DOOMer от Июнь 16, 2010, 22:59



Название: [РЕШЕНО] Не отображается наследник QLineEdit
Отправлено: DOOMer от Июнь 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


Название: Re: Не отображается наследник QLineEdit
Отправлено: EhTemka от Июнь 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);
}
 


Название: Re: Не отображается наследник QLineEdit
Отправлено: DOOMer от Июнь 16, 2010, 23:39
Ясно. Спасибо.