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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нажата ли в данный момент клавиша?  (Прочитано 4971 раз)
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 ";
}

Ничего не печатает, что бы я не нажимала  Плачущий
Причём такие же события для мышки работают.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Май 02, 2010, 14:05 »

А GraphWindow, находится в этот момент в фокусе?
Записан

Юра.
kpx13
Гость
« Ответ #2 : Май 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();
}
ну вроде да ...
Записан
kpx13
Гость
« Ответ #3 : Май 02, 2010, 14:18 »

Код:
void GraphWindow::mousePressEvent(QMouseEvent *m)
{
    setFocus();
  ...
}

Мда... решила проблему...
Извращенским способом
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Май 02, 2010, 17:52 »

>>ну вроде да ...
ты мышкой в него щёлкни, и проверь реагирует на клавиши или нет
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 02, 2010, 23:56 »

Можно использовать нативные ф-ции: GetAsyncKeyState (Вындоуз), GetKeys (Mac). Через события тоже можно, но получается длинновато (надо ставить eventFilter и там отлавливать). Не выйдет если клавиша была нажата когда Ваша задача не в фокусе, но это редкий случай.
Записан
Marat(Qt)
Гость
« Ответ #6 : Май 04, 2010, 18:55 »

У QWidget в FocusPolicy по умолчанию стоит NoFocus, что объясняет ваши проблемы с фокусом.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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