Qt Popup作为完成窗口

时间:2013-04-04 13:02:04

标签: qt popup text-editor

我需要制作某种弹出窗口,其中包含在文本编辑器中完成句子的命题(QTextPlainEdit)。此窗口需要位于此应用程序的所有窗口之上。此弹出窗口也不能在文本编辑器出现时中断输入。我为QWidget尝试了不同类型的标志来实现这个完成者,但我所拥有的只是这个完成窗口放在操作系统的所有窗口之上(即使这个应用程序不活动),或者它在文本编辑器中输入并使主窗口中断在它出现的任何时候都不活跃。

我应该为完成小部件使用哪些标志?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用QWidget::setWindowFlags(Qt::Window | Qt::FramelessWindowHint)。 否则,您可以通过覆盖自动关闭行为来使用自定义版本的Qt::Popup

您也可以尝试这样做:如果您将QTextPlainEdit的父级设置为完成者的父级,它应该执行您想要的操作,前提是父级没有布局(否则它不会“浮动”)。

答案 1 :(得分:1)

Qt文档包含一个实现基于Google的自动完成窗口小部件的示例,其中包含:http://qt-project.org/doc/qt-4.8/network-googlesuggest.html

据我所知,他们做了两件可能与你的情况有关的事情。一个是他们在弹出窗口小部件上设置的标志:

popup = new QTreeWidget;
popup->setWindowFlags(Qt::Popup);
popup->setFocusPolicy(Qt::NoFocus);
popup->setFocusProxy(parent);

另一个是弹出窗口小部件上的自定义事件过滤器,它将大多数按键事件转发到编辑器窗口小部件,并在Enter或Escape上关闭自动完成器。