2011-09-12 43 views
8

Tôi đang chơi xung quanh với một số đồ họa và tôi đã thực hiện chuyển động máy ảnh đơn giản bằng các phím mũi tên. Cách tiếp cận đầu tiên của tôi là ghi đè keyPressEvent để làm điều gì đó như sau:Kiểm tra xem phím có bị Qt

switch(key) 
{ 
    case up: MoveCameraForward(step); break; 
    case left: MoveCameraLeft(step); break; 
    ... 
} 

Điều này không hoạt động như tôi mong muốn. Khi tôi bấm và giữ, ví dụ, phím chuyển tiếp, máy ảnh sẽ di chuyển các đơn vị "bước" về phía trước, sau đó dừng lại một lúc và sau đó tiếp tục di chuyển. Tôi đoán rằng đây là cách sự kiện được tạo ra, để tránh nhiều sự kiện trong trường hợp của một chút dài bấm phím.

Vì vậy, tôi cần phải thăm dò ý kiến ​​của bàn phím trong quy trình Paint() của tôi. Tôi đã không tìm thấy làm thế nào để làm điều đó với Qt. Tôi đã nghĩ đến việc có một số map<Key, bool> sẽ được cập nhật trong keyPressEventkeyReleaseEvent và cuộc thăm dò ý kiến ​​bản đồ đó trong Paint(). Bất kỳ ý tưởng tốt hơn? Cảm ơn bạn vì bất kỳ thông tin chi tiết nào.

Trả lời

6

Vì vậy, tôi cần phải thăm dò ý kiến ​​bàn phím trong thường trình Paint() của tôi. Tôi chưa tìm thấy cách thực hiện với Qt. Tôi nghĩ rằng có một bản đồ mà sẽ được cập nhật trong keyPressEvent và keyReleaseEvent và thăm dò ý kiến ​​bản đồ đó trong Paint().

Phương pháp thứ hai là những gì tôi đã làm, ngoại trừ việc tôi sẽ sử dụng sự kiện QTimer định kỳ liên tục để thăm dò bản đồ được nhấn bàn phím và gọi hàm QWidget :: Update() khi cần thiết để vô hiệu hóa tiện ích hiển thị thay thế. Thực hiện các hoạt động không sơn bên trong Paint() được khuyến khích mạnh mẽ vì nhiều lý do nhưng tôi không biết cách giải thích tốt như thế.

+0

Điều này đặc biệt được khuyến khích vì tỷ lệ lặp lại bàn phím có thể được thiết lập bởi người dùng. Đây là cách duy nhất để đảm bảo nó độc lập với tỷ lệ đánh dấu nội bộ của bạn. – RedX

+0

Có một chuỗi và ví dụ về điều này trong các diễn đàn qt: http://qt-project.org/forums/viewreply/135346/ – bobbaluba

2

Điều này không thẳng về phía trước khi sử dụng Qt, nhưng nhóm Gluon đã làm việc chính xác vấn đề đó (cùng với một loạt các vấn đề khác). GluonInput giải quyết vấn đề và có sẵn như là một phần của Gluon: http://gluon.gamingfreedom.org/ Nó cũng là một API giống như Qt, vì vậy, trong khi đó là sự phụ thuộc phụ, bạn có thể sử dụng nó.

3

Không có API Qt để kiểm tra xem một phím có được nhấn hay không. Bạn có thể phải viết mã riêng cho các nền tảng khác nhau và thêm một chút logic #ifdef.

Trên Windows, bạn có thể sử dụng GetKeyState()GetKeyboardState(), cả hai được khai báo trong windows.h.

Các vấn đề liên quan