2015-07-21 45 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); 
相关问题