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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как определить кто нажал QToolButton на QToolBar?  (Прочитано 3615 раз)
once_again_abc
Гость
« : Август 17, 2011, 09:46 »

Есть QToolBar, на нем две кнопки типа QToolButton - создаются динамически.
Также создаются слоты для обеих кнопок на toggled сигнал.
Вопрос такой: как внтури слотов узнать что кнопка была нажата именно с помощью мыши или клавиатуры, а не программно (например через setChecked)?
Записан
Странник
Гость
« Ответ #1 : Август 17, 2011, 10:04 »

сигнал toggled(bool) информирует об изменении свойства checked (пользователем или программно). о нажатии кнопки пользователем уведомляет сигнал clicked(bool). кстати, об этом написано в документации = )
Записан
once_again_abc
Гость
« Ответ #2 : Август 17, 2011, 10:12 »

я хочу связать две кнопки так, что бы при нажатии одной - отключалась другая. при этом мне еще нужно иметь возможность отключать другую как обычно. т.е. мне нужно различать два события 1) програмное отключение кнопки и 2) нормальное отключение кнопки. и все это делать хочется в одном месте - в одном и том же слоте.
конечно, можно создать еще один слот одной кнопки и соединить его с сигналом clicked другой, но в данной ситуации мне это как раз и не нужно. задача определить в слоте на toggled, что кнопка была отжата программно или вручную/нормально. как это можно сделать средствами Qt?
я могу это сделать через WinAPI (например вычислив координаты курсора), но есть ли хороший способ у Qt?
Записан
once_again_abc
Гость
« Ответ #3 : Август 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 чтобы узнать каким образом была отжата кнопка.
Записан
surendil
Гость
« Ответ #4 : Август 19, 2011, 10:40 »

Наверное, вам подойдёт QButtonGroup.
Записан
once_again_abc
Гость
« Ответ #5 : Август 24, 2011, 10:16 »

Наверное, вам подойдёт QButtonGroup.

Спасибо за подсказку!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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