Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Paramon от Июнь 22, 2014, 14:35



Название: QToolBox и фокус. Баг?
Отправлено: Paramon от Июнь 22, 2014, 14:35
Установил параметр focusPolicy=NoFocus, но toolbox упорно продолжает принимать фокус. Если это баг, то как отловить приём фокуса toolbox'ом, чтобы передать следующему виджету (в сигналах не нашёл)? Спасибо.


Название: Re: QToolBox и фокус. Баг?
Отправлено: Paramon от Июнь 22, 2014, 17:59
Ловлю уведомления о получении фокуса. Это отлично работает. Но падает при закрытии программы.  ???
Код:
void MainWindow::focusChanged( QWidget * old, QWidget * now)
{
    QWidget *qwgt=now->parentWidget();

    if(qwgt!=NULL)
    {
        if(qwgt->objectName()=="toolBox")
        {
            this->focusNextChild();
        }
    }
}


Название: Re: QToolBox и фокус. Баг?
Отправлено: gil9red от Июнь 22, 2014, 18:32
Может быть, now передается пустым?


Название: Re: QToolBox и фокус. Баг?
Отправлено: Paramon от Июнь 22, 2014, 21:08
Может быть, now передается пустым?
Точно. Теперь всё в порядке.
Спасибо.

Оказывается toolbox в себе ещё содержит что-то безыменное, которое и получает фокус. Делаю ему focusPolicy=NoFocus и всё в порядке.


Название: Re: QToolBox и фокус. Баг?
Отправлено: Paramon от Июнь 25, 2014, 12:19
По мере изучения Qt нашёл способ попроще
Код:
    const QObjectList list = ui->toolBox->children();
    for(int i=0; i<list.count(); i++)
    {
        QWidget *wgtCurr = qobject_cast<QWidget*>(list.at(i));
        if(wgtCurr!=NULL) wgtCurr->setFocusPolicy(Qt::NoFocus);
    }

Неприятный баг с "невидимым" фокусом исчез. Правда я не знаю, насколько это корректно, но уж получше чем ловить всё под ряд.