Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Август 17, 2011, 09:46



Название: Как определить кто нажал QToolButton на QToolBar?
Отправлено: once_again_abc от Август 17, 2011, 09:46
Есть QToolBar, на нем две кнопки типа QToolButton - создаются динамически.
Также создаются слоты для обеих кнопок на toggled сигнал.
Вопрос такой: как внтури слотов узнать что кнопка была нажата именно с помощью мыши или клавиатуры, а не программно (например через setChecked)?


Название: Re: Как определить кто нажал QToolButton на QToolBar?
Отправлено: Странник от Август 17, 2011, 10:04
сигнал toggled(bool) информирует об изменении свойства checked (пользователем или программно). о нажатии кнопки пользователем уведомляет сигнал clicked(bool). кстати, об этом написано в документации = )


Название: Re: Как определить кто нажал QToolButton на QToolBar?
Отправлено: once_again_abc от Август 17, 2011, 10:12
я хочу связать две кнопки так, что бы при нажатии одной - отключалась другая. при этом мне еще нужно иметь возможность отключать другую как обычно. т.е. мне нужно различать два события 1) програмное отключение кнопки и 2) нормальное отключение кнопки. и все это делать хочется в одном месте - в одном и том же слоте.
конечно, можно создать еще один слот одной кнопки и соединить его с сигналом clicked другой, но в данной ситуации мне это как раз и не нужно. задача определить в слоте на toggled, что кнопка была отжата программно или вручную/нормально. как это можно сделать средствами Qt?
я могу это сделать через WinAPI (например вычислив координаты курсора), но есть ли хороший способ у Qt?


Название: Re: Как определить кто нажал QToolButton на QToolBar?
Отправлено: once_again_abc от Август 17, 2011, 10:15
показываю свой говнокод, может так понятнее будет что мне желается:

void CommandBar::on_StartButton_Toggle( bool toggled ) {
    if( toggled == true ) { // Start
        m_pButtonPause->setEnabled( true );
    } else { // Stop
        if( m_pButtonPause->isChecked() ) {
            m_forcedPauseOff = true;
            m_pButtonPause->setChecked( false );
        }
        m_pButtonPause->setEnabled( false );
    }
}

void CommandBar::on_PauseButton_Toggle( bool toggled ) {
    if( toggled == true ) { // Paused
        // do smth good
    } else { // Continued if not automatically
        if( m_forcedPauseOff == true )
            m_forcedPauseOff = false;
        else
            // do smth bad
    }
}

использую m_forcedPauseOff чтобы узнать каким образом была отжата кнопка.


Название: Re: Как определить кто нажал QToolButton на QToolBar?
Отправлено: surendil от Август 19, 2011, 10:40
Наверное, вам подойдёт QButtonGroup.


Название: Re: Как определить кто нажал QToolButton на QToolBar?
Отправлено: once_again_abc от Август 24, 2011, 10:16
Наверное, вам подойдёт QButtonGroup.

Спасибо за подсказку!