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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: отловить смену фокуса на форме внутри QGraphicsScene  (Прочитано 4312 раз)
chu
Гость
« : Октябрь 07, 2011, 11:52 »

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

попробуй qApp поменять на lineEdit (указатель) или &lineEdit(ссылка)
Записан
chu
Гость
« Ответ #2 : Октябрь 07, 2011, 12:28 »

попробуй qApp поменять на lineEdit (указатель) или &lineEdit(ссылка)
Нет у QLineEdit сигналов которые высылаются при получении им фокуса
Записан
chu
Гость
« Ответ #3 : Октябрь 07, 2011, 14:31 »

Попробовал переопределить mousePressEvent в виджете, помещаемом в QGraphicsScene
Код:
void myWidget::mousePressEvent(QMouseEvent *event)
{    
    qDebug()<<"mouse pressed";

    QWidget::mousePressEvent(event);
}
Почему-то выполняется только при клике на лэйблы и на lineEdit-ы, у которых свойство enabled==false.
« Последнее редактирование: Октябрь 07, 2011, 14:35 от chu » Записан
chu
Гость
« Ответ #4 : Октябрь 12, 2011, 14:35 »

up
Записан
twp
Гость
« Ответ #5 : Октябрь 13, 2011, 10:36 »

есть
Код:
void QWidget::focusInEvent ( QFocusEvent * event ) [virtual protected]
void QWidget::focusOutEvent ( QFocusEvent * event ) [virtual protected]
можно их переопределить или лучше повесить фильтр событий на LineEdit
Записан
chu
Гость
« Ответ #6 : Октябрь 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) 
все получилось Улыбающийся Спасибо за совет!  Улыбающийся
« Последнее редактирование: Октябрь 14, 2011, 16:45 от chu » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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