2013-04-04 3 views
2

Мне нужно создать какое-то всплывающее окно, содержащее предложения для завершения предложений в текстовом редакторе (QTextPlainEdit). Это окно должно быть поверх всех окон этого приложения. Кроме того, это всплывающее окно не должно прерывать ввод текста в текстовом редакторе при его появлении. Я пробовал разные типы флагов для QWidget, который реализует это дополнение, но все, что у меня есть, это то, что это дополнительное окно помещается над всеми окнами ОС (даже если это приложение неактивно) или прерывает ввод текста в текстовом редакторе и делает главное окно не активен в любое время.Qt Popup как дополнительное окно

Какие флаги следует использовать для полного виджета?

+0

Есть QCompleter, кстати, также :) – mlvljr

ответ

1

Вы можете использовать QWidget::setWindowFlags(Qt::Window | Qt::FramelessWindowHint). В противном случае вы можете использовать настроенную версию Qt::Popup, переопределив поведение автоматического закрытия.

Вы также можете попробовать следующее: если вы установите родительский объект QTextPlainEdit как родительский элемент дополнения, он должен делать то, что вы хотите, при условии, что у родителя нет макета (иначе он не будет «плавать»).

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 или Побег.

Смежные вопросы