Название: В Qt передать фокус. Отправлено: Василий от Август 23, 2006, 13:25 На виджете владельце выложены различные виджеты созданные путём комбинации стандартных.
Вопрос. Как научить владельца после получения фокуса одним из дочерних виджетов, переключать фокус на следующий и предыдущий дочерние, не выходя за пределы владельца. Tab не предлагать. :roll: Название: В Qt передать фокус. Отправлено: bigirbis от Август 23, 2006, 14:03 Если автоматически, то переопиши eventFilter у родителя, проинсталлируй его на интересующих потомков и там уже отлавливай QFocusEvent.
Но задача вообще из разряда экзотических. :? Название: Получилось так, переопределив keyPressEvent у QSpinBox Отправлено: Василий от Август 23, 2006, 16:26 Получилось так, переопределив keyPressEvent у QSpinBox
void mySpinBox::keyPressEvent( QKeyEvent * event ) { if ((event->key() == Qt::Key_Left) or (event->key() == Qt::Key_Right)) { event->ignore(); } else return QSpinBox::keyPressEvent(event); } А у QWidget (панели) на которую положил шарю все и по влево вправо передаю фокус, бегает только по дочерним. Теперь поменять бы местами Up с Right и Down с Left и было бы всё прекрасно!!! Идеи какие нибудь есть? void qpanelgroup::goFocus( char a ) { //qDebug() << QString("%1 %2").arg((int)currentFocus).arg((int)a); if (currentFocus+a<0) currentFocus = ff.count()-1; else if (currentFocus+a>=ff.count()) currentFocus = 0; else currentFocus += a; MyFrame * rr = ff.at(currentFocus); //qDebug() << rr->objectName(); rr->SetFocus(); } void qpanelgroup::keyPressEvent( QKeyEvent * event ) { if (event->key() == Qt::Key_Left) emit goFocus(-1); else if (event->key() == Qt::Key_Right) emit goFocus(1); else event->ignore(); } Название: В Qt передать фокус. Отправлено: bigirbis от Август 24, 2006, 08:37 ИМХО, изврат.
Закольцуй фокус: Код:
А потом переопредели: Код:
|