gpt4 book ai didi

c++ - 带有 QCompleter 的 QLineEdit 不会显示带有空文本字段的 QCompleter 弹出菜单

转载 作者:可可西里 更新时间:2023-11-01 18:26:53 25 4
gpt4 key购买 nike

我有一个 QLineEdit,它有一个 QCompleter 对象。如果用户至少输入了一个字符,则会显示 QCompleter 的弹出菜单,但是当用户删除最后一个字符(从而使该字段留空)时,弹出菜单就会消失。有没有办法让它在 QLineEdit 的文本为空时显示?

最佳答案

一旦使用 QCompleter::complete 删除行编辑文本,您应该能够强制显示完成者的弹出窗口插槽:

lineEdit->completer()->complete();

这里是你如何做到的:

  • 为您的 lineedit 定义 textChanged 插槽;
  • 为您的窗口覆盖 customEvent 方法;
  • 在 textChanged 插槽中,无论何时向窗口发送用户事件lineedit 的文本长度为零;
  • 在 customEvent 方法中,每当收到用户事件时显示完成者;

下面是一个例子:

主窗口.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 );
};

主窗口.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()));
}

希望这对你有帮助,问候

关于c++ - 带有 QCompleter 的 QLineEdit 不会显示带有空文本字段的 QCompleter 弹出菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com