Russian Qt Forum

Qt => Общие вопросы => Тема начата: kpx13 от Май 02, 2010, 13:54



Название: Нажата ли в данный момент клавиша?
Отправлено: kpx13 от Май 02, 2010, 13:54
Как узнать, нажата ли в данный момент клавиша?
Можно ли это сделать без событий?
Я пыталась сделать с событиями, вот код:

Код:
void GraphWindow::keyPressEvent(QKeyEvent *k)
{
    if ( ( k->key() ==  Qt::Key_Shift )&& (! k->isAutoRepeat ()) )
    {
        cout << "shift ";
    }
    cout << "keyPress ";

}

void GraphWindow::keyReleaseEvent(QKeyEvent *k)
{
    cout << "keyRelease ";
}

Ничего не печатает, что бы я не нажимала  :'(
Причём такие же события для мышки работают.


Название: Re: Нажата ли в данный момент клавиша?
Отправлено: lit-uriy от Май 02, 2010, 14:05
А GraphWindow, находится в этот момент в фокусе?


Название: Re: Нажата ли в данный момент клавиша?
Отправлено: kpx13 от Май 02, 2010, 14:08
GraphWindow::GraphWindow(QWidget *parent)
        : QWidget(parent)
{
    clearColor = QColor(255, 219, 245);
    cutterColor = QColor("red");
    linesColor = QColor("blue");
    resultColor = QColor("green");
    buf = new QPixmap(width(),height());
    paint = false;
    begin = false;
    setFocus();
    clearPic();
}
ну вроде да ...


Название: Re: Нажата ли в данный момент клавиша?
Отправлено: kpx13 от Май 02, 2010, 14:18
Код:
void GraphWindow::mousePressEvent(QMouseEvent *m)
{
    setFocus();
  ...
}

Мда... решила проблему...
Извращенским способом


Название: Re: Нажата ли в данный момент клавиша?
Отправлено: lit-uriy от Май 02, 2010, 17:52
>>ну вроде да ...
ты мышкой в него щёлкни, и проверь реагирует на клавиши или нет


Название: Re: Нажата ли в данный момент клавиша?
Отправлено: Igors от Май 02, 2010, 23:56
Можно использовать нативные ф-ции: GetAsyncKeyState (Вындоуз), GetKeys (Mac). Через события тоже можно, но получается длинновато (надо ставить eventFilter и там отлавливать). Не выйдет если клавиша была нажата когда Ваша задача не в фокусе, но это редкий случай.


Название: Re: Нажата ли в данный момент клавиша?
Отправлено: Marat(Qt) от Май 04, 2010, 18:55
У QWidget в FocusPolicy по умолчанию стоит NoFocus, что объясняет ваши проблемы с фокусом.