QCompleter'ı QLineEdit ile kullanıyorum ve QCompleter'in modelini dinamik olarak güncellemek istiyorum. Örneğin, modelin içeriği QLineEdit'in metnine göre güncellenir.QCompleter'in modeli dinamik olarak nasıl güncellenir
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);
}
beklediğim ben girişi "h", bana "h0" ile otomatik tamamlama listesini vermelidir zaman , "h1" ve "h2" ile öğeyi seçmek için keyborad kullanabiliriz. Ama beklediğim gibi davranmıyor.
Modelin, QLineEdit "textChanged" sinyalini yayınlamadan önce ayarlanması gerektiği anlaşılıyor. Bir yol, "keyPressEvent" i yeniden düzenlemektir, ancak QLineEdit'in metnini almak için birçok koşulu içerir.
QCompleter'in modelini dinamik olarak güncellemenin kolay bir yolu olduğunu bilmek isterim.
Ben olayı denedim, çalışıyor, ancak basılmasını (örneğin Backspace ....) Pek çok türü vardır için kullanımı kolay değildir. Qlinecontrol.cpp'de daha fazla ayrıntı görebilirsiniz. Sadece bilmek istiyorum kolay bir şekilde yapılabilir mi? –