为什么QLineEdit with QCompleter自动完成没有显示?
Why QLineEdit with QCompleter for auto completion doesn't shows up?
程序中有两个QLineEdit
,分别是lineEdit
和fileName_Edit
。lineEdit
保存一个目录的路径(取自用户)。然后用户在fileName_Edit
中输入文件名。当用户在fileName_Edit
中输入文件名时,我想向他显示建议。我尝试这样实现QCompleter
:
(dirContents
是保存用户在lineEdit
中指定的目录的内容的QStringList
)
void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
QCompleter *fileEditCompleter = new QCompleter(dirContents, this);
fileEditCompleter->setCaseSensitivity(Qt::CaseInsensitive);
fileEditCompleter->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
ui->fileName_Edit->setCompleter(fileEditCompleter);
}
程序已成功编译,但未显示完成符。即使我尝试将textChanged
信号连接到如下函数,它也不会出现。
QObject::connect(&MainWindow::ui->lineEdit, SIGNAL(&textChanged(QString)), this,SLOT(&MainWindow::on_lineEdit_editingFinished()));
编辑:添加上面的行给出一个错误:
在(标记)之前需要构造函数、析构函数或类型转换
任何帮助都将不胜感激。
试着先简单地完成它,如果代码有效,那么一切都很好,你可以开始改进它。
在构造函数中:
QDir dir("G:/2");//path here
QStringList dirContents = dir.entryList(QStringList(), QDir::Files);
qDebug() << dirContents;//make sure that you list isn't empty, or use isEmpty method
QCompleter *fileEditCompleter = new QCompleter(dirContents, this);
fileEditCompleter->setCaseSensitivity(Qt::CaseInsensitive);
fileEditCompleter->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
ui->lineEdit->setCompleter(fileEditCompleter);
如果这能在你的电脑上运行,那么你可以确保你的系统和项目是好的,并开始改进它(更改列表等)。尽量不要使用全局变量。
如果你想动态地进行,创建一个简单的模型,当你将新的QStringList
设置为它时,你的补全器总是会显示新的数据
QDir dir("G:/2");
QStringList dirContents = dir.entryList(QStringList(), QDir::Files);
mdl = new QStringListModel(dirContents,this);//QStringListModel *mdl in header
QCompleter *fileEditCompleter = new QCompleter(mdl, this);
fileEditCompleter->setCaseSensitivity(Qt::CaseInsensitive);
fileEditCompleter->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
ui->lineEdit->setCompleter(fileEditCompleter);
当你想更改数据时,例如,用户点击按钮或其他什么,你可以做:
QDir dir("G:/2/tmp");
mdl->setStringList(dir.entryList(QStringList(), QDir::Files));
现在您的完井工有了新数据。
根据请求将注释转换为答案。。。
在向用户提供QLineEdit之前,请尝试设置完成符。例如,在MainWindow的构造函数中。将其设置在textChanged插槽中是不正确的。
MainWindow::MainWindow()
: QWidget(nullptr)
, ui( new ui_MainWindow() )
{
ui->setupUi(this);
//...
QCompleter *fileEditCompleter = new QCompleter(dirContents, this);
fileEditCompleter->setCaseSensitivity(Qt::CaseInsensitive);
fileEditCompleter->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
ui->fileName_Edit->setCompleter(fileEditCompleter);
}
void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
// Do nothing here
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- Qt和C++:将QLineEdit添加到QTabWidget中
- 从数据库实时显示QT c++中的数据
- 如何在主窗口标签的对话框中显示QLineEdit的输入
- 在QLineEdit中显示和编辑转义字符
- 如何在只读期间在QLineEdit中显示闪烁的光标
- QlineEdit:显示一个处理过的文本,而不是输入的文本,而是保留它(自定义回声模式)
- QLineEdit:如果鼠标悬停,则显示超长文本作为工具提示
- 为什么QLineEdit::setCursorPosition(int)选择(突出显示)文本
- 为什么QLineEdit with QCompleter自动完成没有显示?
- QT4.8-对QLineEdit执行高亮显示
- 在QLineEdit中显示浮点值
- 在已经包含某些文本的QTextEdit中显示QLineEdit中的文本,并实时更新