Название: Как определить кто нажал 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 |