QLineEdit в QCompleter не показывает все элементы - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь создать приложение меню (например, поиск Windows) с помощью QCompleter.Я хотел бы показать все элементы от завершения, когда QLineEdit пуст.И это работает в первый раз, но когда я начинаю набирать что-то в 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);
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{

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

        if(wordList.contains(lineEdit->text(),Qt::CaseInsensitive))
            qDebug() <<"CATCH IT";
    }
}

Не могли бы вы дать мне совет?

1 Ответ

0 голосов
/ 26 сентября 2019

Вам необходимо сбросить префикс завершения на завершающем.

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

Кроме того, если вы хотите, чтобы он заполнялся только при нажатии возврата в редактировании строки, вам нужно будет создать свою собственную строкуотредактируйте, чтобы обработать это по сравнению с использованием главного окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...