QT實現輸入框與下拉框提示並可模糊匹配


功能:支持下拉框選擇、手動輸入更改和模糊匹配

組件:QLineEdit、QComboBox、QCompleter、QStringListModel

一、組件介紹

1.1 QLineEdit

QLineEdit是一個單行文本編輯器,允許用戶輸入和編輯單行純文本。明白了其作用,進入封裝類QLineEdit源碼看下其成員函數。

      主要看下常用的函數和一些自帶的信號與槽。

class Q_WIDGETS_EXPORT QLineEdit : public QWidget

{

Q_OBJECT

Public:

      QString text() const;

      QString displayText() const;

      QString placeholderText() const;

  void setPlaceholderText(const QString &);

  void setCompleter(QCompleter *completer);

  等等

Q_SIGNALS:

    void textChanged(const QString &);

    void textEdited(const QString &);

    void cursorPositionChanged(int, int);

    void returnPressed();

    void editingFinished();

void selectionChanged();

Q_SLOTS:

    void setText(const QString &);

    void clear();

    void selectAll();

    void undo();

    void redo();

}

1.2 QcomboBox     

       QComboBox 是下拉列表框組件類,它提供一個下拉列表供用戶選擇,也可以直接當作一個 QLineEdit 用作輸入。

class Q_WIDGETS_EXPORT QComboBox : public QWidget

{

Q_OBJECT

Public:

    void setEditable(bool editable);

void setLineEdit(QLineEdit *edit);//和Qlineedit綁定

void setCompleter(QCompleter *c);//設置模糊匹配

    inline void addItems(const QStringList &texts)//綁定字符串組

        { insertItems(count(), texts); }

1.3 QCompleter

       QCompleter能實現QLineEdit根據輸入自動補全的功能,根據單詞列表提示完成單詞輸入,也可補全文件路徑。

       可以設置匹配的模式,匹配是否大小寫敏感等。

       setCaseSensitivity(Qt::CaseInsensitive);//大小寫不敏感

       setFilterMode(Qt::MatchRecursive);//匹配規則:包含則匹配

       setCompletionMode(QCompleter::UnfilteredPopupCompletion);

1.4 QStringListModel

       QStringListModel是最簡單的模型類,具備向視圖提供字符串數據的能力。QStringListModel是一個可編輯的模型,可以為組件提供一系列字符串作為數據。可以將其看作是封裝了QStringList的模型。QStringList是一種很常用的數據類型,實際上是一個字符串列表(也就是QList<QString>)。既然是列表,它也就是線性的數據結構,因此,QStringListModel很多時候都會作為QListView或者QComboBox這種只有一列的視圖組件的數據模型。

       最基本的 model/view 模型的使用。既然是 model/view,我們會分為兩部分:model 和 view。Qt 內置的最簡單的一個模型:QStringListModel。接下來,我們再介紹另外的一些內置模型,在此基礎上,我們將了解到 Qt 模型的基本架構,以便為最高級的應用——自定義模型——打下堅實的基礎。

       model/view(模型/視圖)結構是QT中用界面組件顯示與編輯數據的一種結構,視圖是顯示和編輯數據的界面組件,模型是視圖與原始數據之間的接口。常見的視圖QListView、QTreeView、QTableView,常見的模型QStringListModel、QStandardItemModel。

    //1、讀取一個qstring的list

    QStringList indicator;

    indicator << QString(tr("口罩不滿足抓拍條件"));

    //2、模型設置此數據

    QStringListModel* string_list_model->setStringList(indicator);

   //3、視圖設置此模型

    QCompleter* m_completer->setModel(string_list_model);

二、簡單功能實現

2.1 DEMO源碼

     QLineEdit* m_edit = new(std::nothrow) CTextEdit(this);

    //下拉框匹配,qcombox實現下拉框

     m_box = new(std::nothrow) QComboBox(this);

     m_completer = new(std::nothrow) QCompleter();

    QStringList indicator;

    indicator << QString(tr"AS") << QString(tr"AC") << QString(tr"AFE")<< QString(tr"AF") << QString(tr"ER");

    string_list_model = new QStringListModel();

    string_list_model->setStringList(indicator);//僅顯示indicator里面的

    m_completer->setModel(string_list_model);

    m_completer->setCaseSensitivity(Qt::CaseInsensitive);//大小寫不敏感

    m_completer->setFilterMode(Qt::MatchRecursive);//匹配規則:包含則匹配

    //m_completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);

    //m_edit->setCompleter(m_completer);

     m_box->clear();

    m_box->addItems(indicator);

    m_box->setEditable(true);  //設置可編輯

    m_box->setCompleter(m_completer); //模糊匹

    m_edit->setToolTip(“remind”);

    m_box->setLineEdit(m_edit);   //與編輯m_edit綁定

    m_box->setGeometry(11,12,width,higth);

2.2 實現結果

手動輸入處理意見

 

下拉框選擇默認處理意見

 

模糊匹配

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM