Russian Qt Forum

Qt => Вопросы новичков => Тема начата: chu от Октябрь 07, 2011, 11:52



Название: отловить смену фокуса на форме внутри QGraphicsScene
Отправлено: chu от Октябрь 07, 2011, 11:52
Есть форма, на ней размешены лэйблы, кнопки и lineEdit-ы.
С помощью addWidget() помещаю её в QGraphicsScene и отображаю с помощью QGraphicsView.
Хочу отловить смену фокуса в этой форме, а точнее момент когда фокус передается lineEdit.
Нащел как это делается для обычно размешенных виджетов:
Код:
    connect(qApp,
            SIGNAL(focusChanged(QWidget*,QWidget*)),
            this,
            SLOT(onFocusChanged(QWidget*,QWidget*)));
А как быть с виджетами внутри QGraphicsScene?
 


Название: Re: отловить смену фокуса на форме внутри QGraphicsScene
Отправлено: thechicho от Октябрь 07, 2011, 12:01
попробуй qApp поменять на lineEdit (указатель) или &lineEdit(ссылка)


Название: Re: отловить смену фокуса на форме внутри QGraphicsScene
Отправлено: chu от Октябрь 07, 2011, 12:28
попробуй qApp поменять на lineEdit (указатель) или &lineEdit(ссылка)
Нет у QLineEdit сигналов которые высылаются при получении им фокуса


Название: Re: отловить смену фокуса на форме внутри QGraphicsScene
Отправлено: chu от Октябрь 07, 2011, 14:31
Попробовал переопределить mousePressEvent в виджете, помещаемом в QGraphicsScene
Код:
void myWidget::mousePressEvent(QMouseEvent *event)
{    
    qDebug()<<"mouse pressed";

    QWidget::mousePressEvent(event);
}
Почему-то выполняется только при клике на лэйблы и на lineEdit-ы, у которых свойство enabled==false.


Название: Re: отловить смену фокуса на форме внутри QGraphicsScene
Отправлено: chu от Октябрь 12, 2011, 14:35
up


Название: Re: отловить смену фокуса на форме внутри QGraphicsScene
Отправлено: twp от Октябрь 13, 2011, 10:36
есть
Код:
void QWidget::focusInEvent ( QFocusEvent * event ) [virtual protected]
void QWidget::focusOutEvent ( QFocusEvent * event ) [virtual protected]
можно их переопределить или лучше повесить фильтр событий на LineEdit


Название: Re: отловить смену фокуса на форме внутри QGraphicsScene
Отправлено: chu от Октябрь 14, 2011, 16:36
есть
Код:
void QWidget::focusInEvent ( QFocusEvent * event ) [virtual protected]
void QWidget::focusOutEvent ( QFocusEvent * event ) [virtual protected]
можно их переопределить или лучше повесить фильтр событий на LineEdit
Переопределять - не вариант, в дизайнере потом не разместить нормально.
Повесил фильтры:
Код:
lineEdit->installEventFilter(this); 
Создал обработчик событий для формы:
Код:
bool myDialog::eventFilter(QObject *target, QEvent *event) 
все получилось :) Спасибо за совет!  :)