我正在尝试使用各种小部件为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);
如果我有许多小部件,那么这个解决方案很烦人,特别是如果我稍后添加小部件。我的问题是有没有一个解决方案来关注特定的小部件?
答案 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);