QWidget setFocus不执行任何操作

时间:2015-06-03 21:58:27

标签: c++ qt focus

我正在实现一个自定义上下文菜单,它基本上是一个名为gripmenu的窗口小部件,其中包含其他几个窗口小部件。如果用户左键单击,则会显示此菜单。要在用户点击它之外隐藏或删除它,我需要以某种方式检查用户是否在其他地方点击。我的计划是询问->hasFocus()的所有子窗口小部件,如果没有富有焦点,我将关闭菜单。但不幸的是,我无法确定焦点。为什么?我的代码是:

gripmenu = new GripMenu(this);
gripmenu->setFocus();

gripmenu的构造函数中:

GripMenu::GripMenu(){
  [... set things up]
  ui->lineEdit->setFocus(); // or any other widget to focus, 
                            // even this->setFocus() does not work: see below:
  qDebug() << ui->lineEdit->hasFocus(); // returns false!
}

在我设置之后,如何立即没有焦点?

最后,我的目标是模仿典型的上下文菜单行为(意味着在其他地方点击菜单时会关闭)。所以,如果你对如何解决这个问题有更好的建议,请通过这种方式提示我!

编辑:

我得到了它的工作。 Frank Osterfeld的暗示非常有用。我仍然需要添加&#34; gripmenu-&gt; activate()&#34;在小部件&#34; A&#34;创建(需要)gripmenu,因为没有它,活动小部件仍然是&#34; A&#34;鼠标释放后。

1 个答案:

答案 0 :(得分:1)

尝试下面的代码,它应该工作: QTimer :: singleShot(0,lineEdit,SLOT(setFocus()));