【问题标题】:Qt Popup as a completer windowQt Popup 作为完成窗口
【发布时间】:2017-08-07 14:25:17
【问题描述】:

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

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

【问题讨论】:

  • 还有一个 QCompleter,顺便说一句,还有:)

标签: qt popup text-editor


【解决方案1】:

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

你也可以试试这个:如果你将 QTextPlainEdit 的父级设置为完成者的父级,它应该做你想做的事情,前提是父级没有布局(否则它不会“浮动”)。

【讨论】:

    【解决方案2】:

    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 时关闭自动完成器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多