2010-11-22 16 views
1

Qt Creator'da bir form oluşturdum ve forma üç özel QWidgets (tümü Renderer olarak adlandırılan aynı sınıf) ekledim. Bir kullanıcı Alt tuşuna bastığında haberdar olmak için formun yanı sıra üç widget'ı da istiyorum, ancak şu anda çalışmak için bir tane bile alamıyorum.Qt 4.6 ve OpenGL: aynı anda üç farklı widget ile klavye preslerini nasıl çekebilirsiniz?

void keyPressEvent (QKeyEvent *) ve void keyReleaseEvent (QKeyEvent *) öğesini Renderer sınıfına ekledim, ancak işlevler hiç çağrılmadı ... (kesme noktaları tetiklenmedi) Tuşa basma işlevleri korunur.

void Renderer::keyPressEvent(QKeyEvent *event) { 
    switch(event->key()) { 
    case Qt::Key_Alt: { 
     isAltPressed = true; 
     cout << "alt got pressed" << endl; 
     break; 
    } 
    default: 
     break; 
    } 
} 

void Renderer::keyReleaseEvent(QKeyEvent *event) { 
    switch(event->key()) { 
    case Qt::Key_Alt: { 
     isAltPressed = false; 
     cout << "alt released" << endl; 
     break; 
    } 
    default: 
     break; 
    } 
} 

Burada bir şey mi eksik?

Ayrıca, üç aletin aynı anda kaydettiği klavye preslerine sahip olmak için yapmam gereken özel bir şey var mı?

Çok teşekkürler.

+0

Yanıtlandı. Sorunun ikinci kısmı için problemi, özel bir üye değişkeni yerine bir sınıf değişkeni olan isAltPressed yaparak çözdüm. – confusedKid

cevap

3

Senin focusPolicy nedir? Klavye olayları sadece widget'la odaklanacaktır (daha sonra diğer işleyicileri kendiniz arayabilirsiniz).

+0

Daha önce focusPolicy ile çalışmıyorum ve dürüst bir şekilde şimdiye kadar (Qt için) duymadım bile ... bu konuda daha fazla bilgi edinmek için bana bir link verebilir misiniz? – confusedKid

+0

Bağlantı eklendi. Qt ile kendimi çok az deneyimim var, ama pencereye odaklanan tuşa basma olaylarıyla ilgili bu kural oldukça evrenseldir. Varsayılan politikanın "odaklanma" olduğunu gördüğümde, çift kontrol etmenizi önerdiğini düşündüm. –

+0

Link artık çalışmıyor. – someuser