1.增加如下设置
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
lineEdit->completer()->complete();
这是你如何做到的:
为你的lineedit定义textChanged插槽;
覆盖窗口的customEvent方法;
在textChanged插槽中将用户事件发送到窗口
lineedit的文字长度为零;
在customEvent方法中,只要收到用户事件,就会显示完成;
以下是一个例子:
mainwindow.h:
-
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 );
-
};
mainwindow.cpp:
-
class CompleteEvent : public QEvent
-
{
-
public:
-
CompleteEvent(QLineEdit *lineEdit) : QEvent(QEvent::User),m_lineEdit(lineEdit) { }
-
void complete()
-
{
-
m_lineEdit->completer()->complete();
-
}
-
private:
-
QLineEdit *m_lineEdit;
-
};
-
MainWindow::MainWindow(QWidget *parent) :
-
QMainWindow(parent),ui(new Ui::MainWindow)
-
{
-
ui->setupUi(this);
-
QStringList wordList;
-
wordList << "one" << "two" << "three" << "four";
-
QLineEdit *lineEdit = new QLineEdit(this);
-
lineEdit->setGeometry(20,20,200,30);
-
connect(lineEdit,SIGNAL(textChanged(QString)),SLOT(on_lineEdit_textChanged(QString )));
-
QCompleter *completer = new QCompleter(wordList,this);
-
completer->setCaseSensitivity(Qt::CaseInsensitive);
-
completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
-
lineEdit->setCompleter(completer);
-
}
-
MainWindow::~MainWindow()
-
{
-
delete ui;
-
}
-
void MainWindow::customEvent(QEvent * event)
-
{
-
QMainWindow::customEvent(event);
-
if (event->type()==QEvent::User)
-
((CompleteEvent*)event)->complete();
-
}
-
void MainWindow::on_lineEdit_textChanged(QString text)
-
{
-
if (text.length()==0)
-
QApplication::postEvent(this,new CompleteEvent((QLineEdit*)sender()));
-
}
网友评论