首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止QWidget的焦点外移

防止QWidget的焦点外移
EN

Stack Overflow用户
提问于 2012-07-18 01:08:06
回答 2查看 6.4K关注 0票数 2

我想写一个类似QDialog的类。我已经很好地过滤掉了非对话窗口小部件的鼠标事件,但是我仍然有一个关于焦点的问题。由于QDialog lookalike类只是一个常见的小部件,因此它可能会因为按键(制表符)而失去焦点。因此,与QDialog外观无关的小部件,我不能点击,但可以聚焦的小部件,可能会获得焦点。有没有一种巧妙的方法可以防止用户把注意力从我的对话框外观相似的子部件上移开?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-26 19:38:52

这里有一个解决方案:

代码语言:javascript
复制
// somewhere in your code
connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
  SLOT(focusChanged(QWidget*,QWidget*)));

void MyDialog::focusChanged(QWidget*, QWidget* to)
{
  if (!isAncestorOf(to))
  {
    QWidget* widget(qobject_cast<QWidget*>(children().front()));

    widget->setFocus(Qt::OtherFocusReason);

    QKeyEvent event(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);

    qApp->sendEvent(widget, &event);
  }
  // else do nothing
}

假定子对象是QFrameQWidget的实例。

票数 2
EN

Stack Overflow用户

发布于 2012-07-18 01:29:17

假设您的类似QDialog的小部件是一个单独的窗口,我认为您正在寻找QWdiget::setModal( true )。它阻止应用程序的其他窗口中的小部件接收任何输入事件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11527407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档