• QCompleter自动补全


     知识永远是那么多,想到什么就总结什么,今天记录一下关于我对QComplete的一些小见解。
     
    官方文档中叙述如下:
        可以在任何Qt的窗口小部件中使用QCompleter提供自动补全功能,如:QLineEdit和QComboBox。当用户开始输入一个字符,QCompleter根据单词列表提示完成单词。这个单词列表是作为一个QAbstractItemModel被提供的(对于简单的应用,这里所说的列表是静态的,可以传递一个QStringList来构造QCompleter)。
     
    QCompleter补全文件路径
    QLineEdit *search_line_edit = new QLineEdit();
    QCompleter *completer = new QCompleter();
    QDirModel *dir_model = new QDirModel();
    completer->setModel(dir_model);
    search_line_edit->setCompleter(completer);
    效果如下:
    QCompleter自动补全
    QCompleter自动补全
     
    QCompleter补全单词
    QStringList word_list;
    word_list<<"Java"<<"C++"<<"C#"<<"PHP"<<"Perl"<<"Python"<<"Delphi"<<"Ruby";
    QLineEdit *search_line_edit = new QLineEdit();
    QCompleter *completer = new QCompleter(word_list, this);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    search_line_edit->setCompleter(completer);
    效果如下:
    QCompleter自动补全
    QCompleter自动补全
     
    QCompleter添加新单词
    search_line_edit = new QLineEdit();
    completer = new QCompleter();
    string_list_model = new QStringListModel();
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    completer->setModel(string_list_model);
    search_line_edit->setCompleter(completer);
    connect(search_line_edit, &QLineEdit::editingFinished, this, &MainWidget::editComplete);
    槽函数如下:
    void MainWidget::editComplete()
    {
    QString text = search_line_edit->text();
    if(QString::compare(text, QString("")) != 0)
    {
    bool is_contains = word_list.contains(text, Qt::CaseInsensitive);
    if(!is_contains)
    {
    word_list<<text;
    string_list_model->setStringList(word_list);
    }
    }
    }
        初始word_list中无任何单词,当输入框编辑完成之后,首先判断是否为空,若非空,则检测word_list中是否包含该文本(忽略大小写),若不包含,则进行添加。
    效果如下:
    QCompleter自动补全
     
    常用的方法
    • void setMaxVisibleItems(int maxItems)
    设置最大显示数目
    • void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
    设置是否区分大小写
    Qt::CaseSensitivity取值如下:
        Qt::CaseInsensitive    0    大小写不敏感
        Qt::CaseSensitive      1    大小写敏感
    默认为:Qt::CaseSensitive
    • void setModelSorting(ModelSorting sorting)
    设置排序方式
    QCompleter::ModelSorting取值如下:
    QCompleter::UnsortedModel                   0    该模型是未排序
    QCompleter::CaseSensitivelySortedModel      1    该模型是大小写敏感排序
    QCompleter::CaseInsensitivelySortedModel    2    的模型是大小写不敏感排序的
     
    注:
        技术在于交流、沟通,转载请注明出处并保持作品的完整性。
  • 相关阅读:
    nginx-rtmp-module
    nginx搭建支持http和rtmp协议的流媒体服务器之一
    用开源nginx-rtmp-module搭建flash直播环境
    Nginx RTMP 功能研究
    开源的视频直播
    LeetCode题解之Rotate String
    LeetCode题解之 Letter Case Permutation
    LeetCode题解之 3Sum
    LeetCode 题解之 Two Sum
    LeetCode 题解之Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/lanye/p/3533786.html
Copyright © 2020-2023  润新知