C++ 如何在特定小部件上设置焦点

C++ 如何在特定小部件上设置焦点,c++,qt,C++,Qt,我正在尝试用OpenGL项目的各种小部件实现GUI。我有一个用于绘制场景的主窗口小部件。OpenGL小部件与按键和鼠标事件相关联,因此应该始终关注它。我注意到,如果我点击一个按钮,那么焦点就会移动到这个按钮,这意味着焦点不再与OpenGL小部件关联。用鼠标单击小部件不会改变焦点。解决方案之一是关闭GUI中除OpenGL小部件外的所有小部件的焦点,如下所示 ui->processButton->setFocusPolicy(Qt::NoFocus); ui->quitButt

我正在尝试用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);

如果我有很多小部件,那么这个解决方案很烦人,尤其是如果我以后添加小部件的话。我的问题是,有没有解决方案可以将焦点设置在特定的小部件上?

您的解决方案很好,您不应该手动枚举小部件:

// 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);
/C++11
for(自动小部件:findChildren())
如果(!qobject_cast(widget))widget->setFocusPolicy(Qt::NoFocus);
//C++98
foreach(QWidget*widget,findChildren())
如果(!qobject_cast(widget))widget->setFocusPolicy(Qt::NoFocus);