Qt QCompleter中的QLineEdit不';不显示所有项目

Qt QCompleter中的QLineEdit不';不显示所有项目,qt,menu,Qt,Menu,我正在尝试使用QCompleter创建一个菜单应用程序(如windows search)。 我想在QLineEdit为空时显示completer中的所有项目。 它第一次起作用,但当我开始在lineEdit中键入内容,并从lineEdit中删除所有字符,然后按Enter时,我什么也看不到。我的错在哪里 我的代码如下 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindo

我正在尝试使用QCompleter创建一个菜单应用程序(如windows search)。 我想在QLineEdit为空时显示completer中的所有项目。 它第一次起作用,但当我开始在
lineEdit
中键入内容,并从
lineEdit
中删除所有字符,然后按
Enter
时,我什么也看不到。我的错在哪里

我的代码如下

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{

    this->wordList << "alpha" << "omega" << "omicron" << "zeta" << "icon";

    this->lineEdit = new QLineEdit(this);

    completer = new QCompleter(wordList, this);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    lineEdit->setCompleter(completer);
    completer->QCompleter::complete();

    ui->setupUi(this);
}
MainWindow::MainWindow(QWidget*父项)
:QMainWindow(父级)
,ui(新ui::Main窗口)
{
this->wordList setupUi(this);
}

void主窗口::按键事件(QKeyEvent*event)
{
如果((事件->键()==Qt::键|返回|事件->键()==Qt::键|输入))
{
如果(lineEdit->text()==“”)
{
完成符->完成();
}
if(wordList.contains(lineEdit->text(),Qt::不区分大小写))

qDebug()您需要在完成符上重置完成前缀

  if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
  {
    if(lineEdit->text().isEmpty())
    {
      lineEdit->completer()->setCompletionPrefix("");
      lineEdit->completer()->complete();
    }
  }

此外,如果目的是仅在行编辑中按return键时填充行编辑,则您将希望创建自己的行编辑来处理此问题,而不是使用主窗口。

它可以工作,谢谢!您是一位国王。:)Qt对我来说真的很新,所以我处于低级别,再次感谢!)
  if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
  {
    if(lineEdit->text().isEmpty())
    {
      lineEdit->completer()->setCompletionPrefix("");
      lineEdit->completer()->complete();
    }
  }