Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>you should be able to force completer's popup window to get shown once your line edit text is erased by using <a href="http://doc.qt.nokia.com/latest/qcompleter.html#complete" rel="noreferrer">QCompliter::complete</a> slot:</p> <pre><code>lineEdit-&gt;completer()-&gt;complete(); </code></pre> <p>Here's how you can do it:</p> <ul> <li>define textChanged slot for your lineedit; </li> <li>override customEvent method for your window; </li> <li>in the textChanged slot send user event to the window whenever lineedit's text has zero length; </li> <li>in the customEvent method show completer whenever user event is received;</li> </ul> <p>Below is an example:</p> <p>mainwindow.h:</p> <pre><code>class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); protected: void customEvent(QEvent * event); private: Ui::MainWindow *ui; private slots: void on_lineEdit_textChanged(QString ); }; </code></pre> <p>mainwindow.cpp:</p> <pre><code>class CompleteEvent : public QEvent { public: CompleteEvent(QLineEdit *lineEdit) : QEvent(QEvent::User), m_lineEdit(lineEdit) { } void complete() { m_lineEdit-&gt;completer()-&gt;complete(); } private: QLineEdit *m_lineEdit; }; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui-&gt;setupUi(this); QStringList wordList; wordList &lt;&lt; "one" &lt;&lt; "two" &lt;&lt; "three" &lt;&lt; "four"; QLineEdit *lineEdit = new QLineEdit(this); lineEdit-&gt;setGeometry(20, 20, 200, 30); connect(lineEdit, SIGNAL(textChanged(QString)), SLOT(on_lineEdit_textChanged(QString ))); QCompleter *completer = new QCompleter(wordList, this); completer-&gt;setCaseSensitivity(Qt::CaseInsensitive); completer-&gt;setCompletionMode(QCompleter::UnfilteredPopupCompletion); lineEdit-&gt;setCompleter(completer); } MainWindow::~MainWindow() { delete ui; } void MainWindow::customEvent(QEvent * event) { QMainWindow::customEvent(event); if (event-&gt;type()==QEvent::User) ((CompleteEvent*)event)-&gt;complete(); } void MainWindow::on_lineEdit_textChanged(QString text) { if (text.length()==0) QApplication::postEvent(this, new CompleteEvent((QLineEdit*)sender())); } </code></pre> <p>hope this helps, regards</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload