2013-07-23 176 views
1

因此,我正在編寫一個qtwidget,它需要重寫相應的函數來輸入鍵盤和鼠標。然而,按鍵事件不會發生,直到發生mousepress事件。我一直在關注焦點,這似乎沒有幫助。我覺得我錯過了關於qt如何處理事件的事情。你可以填寫任何我。謝謝KeyPress事件等待MousePress事件qt

這是我認爲是相關的代碼位。讓我知道你是否需要更多

MeshTest::MeshTest(QWidget *parent) : 
    QGLWidget(parent) 
{ 
setFocusPolicy(Qt::StrongFocus); 
/* Other stuff */ 

} 
void MeshTest::mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button() == Qt::LeftButton) { 

    /* Some math/ray casting here */ 
    hasHit = MeshTest::findIntersections(x,y,z,dirx,diry,dirz); 


    } 
} 
void MeshTest::mouseReleaseEvent(QMouseEvent *event){ 
    if (event->button() == Qt::LeftButton) { 
     /* Some ray casting stuff here */ 
    } 

    if(hasHit) 
    updateGL(); 
} 

void MeshTest::keyPressEvent(QKeyEvent* event){ 
    printf("Key Pressed\n"); //Just for debugging this particular bug 
} 
+1

您是否可以發佈一些代碼?聽起來像MainWindow類(如果你有一個?)正在採取關鍵事件,並且小部件在鼠標事件之後只接受它們的原因是因爲它具有焦點。你可能想要爲小部件嘗試setFocusPolicy(Qt :: StrongPolicy),看看是否有效。 –

+0

右鍵我將該行添加到構件的構件,但它沒有解決問題。我會在幾個代碼中獲得一些代碼 – user1415372

+0

還在主窗口中添加了NoFocus,但仍然遇到了同樣的問題 – user1415372

回答

0

好吧,所以我在前幾天解決了這個問題。解決方法是覆蓋QWidget :: event(QEvent *事件) 並在函數本身中執行所有事件處理