Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Docent86 от Май 28, 2013, 09:42



Название: один сигнал многократно вызывает слот
Отправлено: 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



Название: Re: один сигнал многократно вызывает слот
Отправлено: _OLEGator_ от Май 28, 2013, 09:52
Потому что keyPressEvent вызывается непрерывно, пока зажата кнопка.
Как вариант:
Код
C++ (Qt)
QPushButton::setShortcut ( const QKeySequence & key )


Название: Re: один сигнал многократно вызывает слот
Отправлено: Bepec от Май 28, 2013, 10:02
Есть флаг автоповтора у QKeyEvent.

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

Цитировать
bool   isAutoRepeat () const


Название: Re: один сигнал многократно вызывает слот
Отправлено: thechicho от Май 28, 2013, 10:13
так не вариант написать?
Код:
case Qt::Key_Q:
        qDebug()<<"KEYBOARD Q";
        on_pushButton_Doc_clicked();
        break;
......


Название: Re: один сигнал многократно вызывает слот
Отправлено: Bepec от Май 28, 2013, 10:15
thechicho - Проблема ТСса при этом не исчезнет :) Никто же незнает, может у него кнопки на разных виджетах ;)


Название: Re: один сигнал многократно вызывает слот
Отправлено: thechicho от Май 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


Название: Re: один сигнал многократно вызывает слот
Отправлено: mutineer от Май 28, 2013, 10:24
Код
C++ (Qt)
connect(this,SIGNAL(F1Key()),SLOT(on_pushButton_Doc_clicked()));
А сколько раз вызывается эта строчка?


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


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


Название: Re: один сигнал многократно вызывает слот
Отправлено: thechicho от Май 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*


Название: Re: один сигнал многократно вызывает слот
Отправлено: Docent86 от Май 28, 2013, 12:05
Ну всякое бывает невыспался - не сразу понял причину.