【问题标题】:How to set Focus on a specific widget如何在特定小部件上设置焦点
【发布时间】:2015-07-21 19:41:27
【问题描述】:

我正在尝试使用 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++ qt


    【解决方案1】:

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

    // 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);
    

    【讨论】:

      猜你喜欢
      • 2014-04-05
      • 2012-07-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多