gpt4 book ai didi

c++ - QWidget setFocus 什么都不做

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:03 28 4
gpt4 key购买 nike

我正在实现一个自定义上下文菜单,它基本上是一个名为 gripmenu 的小部件,其中包含其他几个小部件。如果用户左键单击,则应显示此菜单。如果用户在其外部单击,要隐藏或删除它,我需要以某种方式检查用户是否单击其他地方。我的计划是向其所有子部件询问 ->hasFocus(),如果没有 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 的提示非常有用。我仍然必须在创​​建(需要)gripmenu 的小部件“A”中添加一个“gripmenu->activate()”,因为如果没有它,事件小部件在鼠标释放后仍将是“A”。

最佳答案

尝试下面的代码,它应该可以工作:

QTimer::singleShot(0, lineEdit, SLOT(setFocus()));

关于c++ - QWidget setFocus 什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631523/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com