2015-07-21 86 views
0

我正在嘗試爲OpenGL項目實現各種小部件的GUI。我有一個繪製場景的主要部件。 OpenGL小部件與鍵和鼠標事件相關聯,因此應始終關注它。我注意到,如果我點擊說一個按鈕,然後焦點移動到這個按鈕,這意味着焦點不再與OpenGL小部件相關聯。用鼠標點擊小部件不會改變焦點。其中一個解決方案是在GUI中關閉對焦的所有部件,除了OpenGL的部件如下如何將焦點設置爲特定的小部件

ui->processButton->setFocusPolicy(Qt::NoFocus); 
ui->quitButton->setFocusPolicy(Qt::NoFocus); 
ui->clearButton->setFocusPolicy(Qt::NoFocus); 
ui->textEdit->setFocusPolicy(Qt::NoFocus); 
ui->groupBox->setFocusPolicy(Qt::NoFocus); 

,如果我有許多小部件,那麼這個解決方案是惱人的,特別是如果我以後添加小部件。我的問題是,是否有解決方案將重點放在特定的小部件上?

回答

2

你的解決方案是好的,你剛纔不應該列舉手動部件:

// C++11 
for (auto widget : findChildren<QWidget*>()) 
    if (! qobject_cast<QOpenGlWidget*>(widget)) widget->setFocusPolicy(Qt::NoFocus); 

// C++98 
foreach (QWidget * widget, findChildren<QWidget*>()) 
    if (! qobject_cast<QOpenGlWidget*>(widget)) widget->setFocusPolicy(Qt::NoFocus); 
相關問題