Tôi sử dụng QCompleter với QLineEdit và tôi muốn cập nhật mô hình của QCompleter theo cách động. tức là nội dung của mô hình được cập nhật theo văn bản của QLineEdit.Cách cập nhật mô hình của QCompleter tự động
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);
}
tôi mong muốn khi tôi đầu vào "h", nó sẽ cho tôi một danh sách tự động hoàn tất với "h0" , "h1" và "h2" và tôi có thể sử dụng keyborad để chọn mục. Nhưng nó không có hành vi như tôi mong đợi.
Dường như mô hình nên được đặt trước khi QLineEdit phát ra tín hiệu "textChanged". Một cách là để thực hiện lại "keyPressEvent", nhưng nó liên quan đến nhiều điều kiện để có được văn bản của QLineEdit.
Vì vậy, tôi muốn biết có cách nào dễ dàng để cập nhật mô hình của QCompleter tự động không?
Tôi đã thử sự kiện, nó hoạt động, nhưng nó không phải là dễ dàng để sử dụng cho có rất nhiều loại bấm phím (ví dụ Backspace ....). Trong qlinecontrol.cpp, bạn có thể xem thêm chi tiết. Tôi chỉ muốn biết nó có thể được thực hiện một cách dễ dàng? –