Uso QCompleter con QLineEdit e voglio aggiornare il modello di QCompleter in modo dinamico. cioè il contenuto del modello viene aggiornato in base al testo di QLineEdit.Come aggiornare dinamicamente il modello di QCompleter
1) mdict.h
#include <QtGui/QWidget>
class QLineEdit;
class QCompleter;
class QModelIndex;
class mdict : public QWidget
{
Q_OBJECT
public:
mdict(QWidget *parent = 0);
~mdict() {}
private slots:
void on_textChanged(const QString &text);
private:
QLineEdit *mLineEdit;
QCompleter *mCompleter;
};
2) mdict.cpp
#include <cassert>
#include <QtGui>
#include "mdict.h"
mdict::mdict(QWidget *parent) : QWidget(parent), mLineEdit(0), mCompleter(0)
{
mLineEdit = new QLineEdit(this);
QPushButton *button = new QPushButton(this);
button->setText("Lookup");
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(mLineEdit);
layout->addWidget(button);
setLayout(layout);
QStringList stringList;
stringList << "m0" << "m1" << "m2";
QStringListModel *model = new QStringListModel(stringList);
mCompleter = new QCompleter(model, this);
mLineEdit->setCompleter(mCompleter);
mLineEdit->installEventFilter(this);
connect(mLineEdit, SIGNAL(textChanged(const QString&)),
this, SLOT(on_textChanged(const QString&)));
}
void mdict::on_textChanged(const QString &)
{
QStringListModel *model = (QStringListModel*)(mCompleter->model());
QStringList stringList;
stringList << "h0" << "h1" << "h2";
model->setStringList(stringList);
}
mi aspetto quando ingresso "h", dovrebbe darmi un elenco di completamento automatico con "H0" , "h1" e "h2" e potrei usare il keyborad per selezionare l'elemento. Ma non funziona come mi aspettavo.
Sembra che il modello debba essere impostato prima che QLineEdit emetta il segnale "textChanged". Un modo è reimplementare "keyPressEvent", ma implica molte condizioni per ottenere il testo di QLineEdit.
Quindi, voglio sapere c'è un modo semplice per aggiornare il modello di QCompleter in modo dinamico?
ho cercato evento, funziona, ma non è facile da usare perché ci sono tanti tipi di tasti premuti (per esempio Backspace ....). In qlinecontrol.cpp, puoi vedere più dettagli. Voglio solo sapere che potrebbe essere fatto in un modo semplice? –