अद्यतन करने के लिए कैसे मैं QLineEdit के साथ QCompleter का उपयोग करता हूं, और मैं गतिशील रूप से QCompleter के मॉडल को अद्यतन करना चाहता हूं। यानी मॉडल की सामग्री QLineEdit के पाठ के अनुसार अपडेट की जाती है।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);
}
मैं उम्मीद जब मैं इनपुट "h", यह मेरे "H0" के साथ एक स्वत: पूर्ण सूची देना चाहिए , "एच 1", और "एच 2" और मैं आइटम का चयन करने के लिए कीबार्ड का उपयोग कर सकता था। लेकिन जैसा कि मैंने उम्मीद की थी, यह व्यवहार नहीं करता है।
ऐसा लगता है कि मॉडल को QLineEdit "textChanged" सिग्नल उत्सर्जित करने से पहले सेट किया जाना चाहिए। एक तरीका है "keyPressEvent" को पुन: कार्यान्वित करना, लेकिन इसमें QLineEdit के टेक्स्ट को प्राप्त करने के लिए कई स्थितियां शामिल हैं।
तो, मैं जानना चाहता हूं कि QCompleter के मॉडल को गतिशील रूप से अपडेट करने का कोई आसान तरीका है?
मैं घटना की कोशिश की है, यह काम करता है, लेकिन यह वहाँ keypresses (उदाहरण, बैकस्पेस ...।) के इतने प्रकार के होते हैं के लिए उपयोग करने के लिए आसान नहीं है। Qlinecontrol.cpp में, आप अधिक जानकारी देख सकते हैं। मैं सिर्फ यह जानना चाहता हूं कि यह एक आसान तरीके से किया जा सकता है? –