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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: один сигнал многократно вызывает слот  (Прочитано 3087 раз)
Docent86
Гость
« : Май 28, 2013, 09:42 »

Суть задачи - есть PushButton и слот clicked() хочу вызвать слот еще и от нажатия кнопки на клавиатуре.
Проблема -  при однократном нажатии кнопки слот вызывается многократно:
Код:
.......
private slots:
    void keyPressEvent(QKeyEvent *event);
........

connect(this,SIGNAL(F1Key()),SLOT(on_pushButton_Doc_clicked()));
........
void MainWindow::keyPressEvent(QKeyEvent *event)
{
   switch (event->key())
  {
    case Qt::Key_Q:
        qDebug()<<"KEYBOARD Q";
        emit F1Key();
        break;
......
void MainWindow::on_pushButton_Doc_clicked()
{
    qDebug()<<"DOK clicked";
}
.......

результат всего этого действия:
Код:
KEYBOARD Q 
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked

Записан
_OLEGator_
Гость
« Ответ #1 : Май 28, 2013, 09:52 »

Потому что keyPressEvent вызывается непрерывно, пока зажата кнопка.
Как вариант:
Код
C++ (Qt)
QPushButton::setShortcut ( const QKeySequence & key )
« Последнее редактирование: Май 28, 2013, 09:54 от _OLEGator_ » Записан
Bepec
Гость
« Ответ #2 : Май 28, 2013, 10:02 »

Есть флаг автоповтора у QKeyEvent.

Автоповтор - это когда ты зажимаешь клавишу и она, зажатая, нажимается многократно.

Цитировать
bool   isAutoRepeat () const
Записан
thechicho
Гость
« Ответ #3 : Май 28, 2013, 10:13 »

так не вариант написать?
Код:
case Qt::Key_Q:
        qDebug()<<"KEYBOARD Q";
        on_pushButton_Doc_clicked();
        break;
......
Записан
Bepec
Гость
« Ответ #4 : Май 28, 2013, 10:15 »

thechicho - Проблема ТСса при этом не исчезнет Улыбающийся Никто же незнает, может у него кнопки на разных виджетах Подмигивающий
Записан
thechicho
Гость
« Ответ #5 : Май 28, 2013, 10:20 »

почему не исчезнет?
Код:
qDebug()<<"KEYBOARD Q";

Цитировать
KEYBOARD Q
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
Записан
mutineer
Гость
« Ответ #6 : Май 28, 2013, 10:24 »

Код
C++ (Qt)
connect(this,SIGNAL(F1Key()),SLOT(on_pushButton_Doc_clicked()));
А сколько раз вызывается эта строчка?
Записан
Docent86
Гость
« Ответ #7 : Май 28, 2013, 10:31 »

Код
C++ (Qt)
connect(this,SIGNAL(F1Key()),SLOT(on_pushButton_Doc_clicked()));
А сколько раз вызывается эта строчка?


O_o Зыыы. Спасибо за намек. Нашел)))
 Запхнул конект в слот который сам по себе многократно вызывался
Записан
thechicho
Гость
« Ответ #8 : Май 28, 2013, 12:00 »

Цитировать
O_o Зыыы. Спасибо за намек. Нашел)))
 Запхнул конект в слот который сам по себе многократно вызывался

вам какбэ дебаг давно намекнул об этом
Цитировать
KEYBOARD Q
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked
DOK clicked

*facepalm*
Записан
Docent86
Гость
« Ответ #9 : Май 28, 2013, 12:05 »

Ну всякое бывает невыспался - не сразу понял причину.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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