QWidget setFocus不做任何事情
QWidget setFocus does nothing
我正在实现一个自定义上下文菜单,它基本上是一个名为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!
}
怎么可能我刚设置好就没有对焦呢?
最后,我的目标是模仿典型的上下文菜单行为(这意味着当单击其他地方时菜单被关闭)。如果你有更好的建议,请告诉我!
编辑:我把它修好了。弗兰克·奥斯特菲尔德的暗示真的很有用。我仍然需要在创建(需要)gripmenu的小部件"a"中添加"gripmenu->activate()",因为没有它,在鼠标释放后活动小部件仍然是"a"。
试试下面的代码,应该可以工作了:
QTimer::singleShot(0, lineEdit, SLOT(setFocus()));
Widget通常不会立即显示、重绘或获得焦点,因此同步调用是无用的。
你为什么不使用QWidgetAction
嵌入小部件到一个正常的菜单,而不是通过信号处理黑客?
相关文章:
- 是否有通用方法可以找到任何以 null 结尾的字符串的长度?
- 以下编译时编程任务在C++中是可能的
- 用作初始值设定项时,空括号 ("T()") 和空大括号 ("T{}") 是否有任
- QT:即使在 setfocus() 之后也无法用键盘控制我的 QGraphicsPixmapItem
- 标准::任何时 GMOCKing 接口的类型不完整
- Windows SetFocus,目标窗口不会捕获键盘输入
- 将任何以 n F 开头或以 f 开头的单词替换为 *
- ::createFile winApi 失败,出现错误 5 (access_denied).是外壳编程或其他解决方案或任
- mfcc++: setfocus也设置了捕获
- 频率字长,程序只打开cmd,但不做任何事,c++
- QWidget setFocus不做任何事情
- 参数传递-任何在c++中缩短String类型的方法