如何设置专注于特定小部件

时间:2015-07-21 19:41:28

标签: c++ qt

我正在尝试使用各种小部件为OpenGL项目实现GUI。我有一个用于绘制场景的主要小部件。 OpenGL小部件与Key和Mouse事件相关联,因此应始终关注它。我注意到,如果我点击说按钮,则焦点移动到此按钮,这意味着焦点不再与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);

如果我有许多小部件,那么这个解决方案很烦人,特别是如果我稍后添加小部件。我的问题是有没有一个解决方案来关注特定的小部件?

1 个答案:

答案 0 :(得分: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);