zoukankan      html  css  js  c++  java
  • Qt QSortFilterProxyModel示例代码, 使用方法

    1. QSortFilterProxyModel不能单独使用,它只是一个“代理”,真正的数据需要另外的一个model提供,而且它是用来排序和过滤的。

    2. 实现代码

    #ifndef DIALOG_H
    #define DIALOG_H
    
    #include <QDialog>
    #include <QtGui>
    
    class Dialog : public QDialog
    {
        Q_OBJECT
        
    public:
        Dialog(QWidget *parent = 0);
    
    public slots:
        void reapplyFilter();
    
    private:
        QSortFilterProxyModel *proxyModel;
        QStringListModel *sourceModel;
        QListView *listView;
        QComboBox *syntaxComboBox;
        QLineEdit *filterLineEdit;
    };
    
    #endif // DIALOG_H
    


    dialog.cpp

    #include "dialog.h"
    
    Dialog::Dialog(QWidget *parent)
        : QDialog(parent)
    {
        sourceModel = new QStringListModel(this);
        sourceModel->setStringList(QColor::colorNames());
    
        proxyModel = new QSortFilterProxyModel(this);
        proxyModel->setSourceModel(sourceModel);
        proxyModel->setFilterKeyColumn(0);
    
        listView = new QListView;
        listView->setModel(proxyModel);
    
        QLabel *filterLabel = new QLabel("Filter:", this);
        filterLabel->setFixedWidth(100);
        QLabel *patternLabel = new QLabel("Pattern syntax:", this);
        patternLabel->setFixedWidth(100);
    
        filterLineEdit = new QLineEdit(this);
        syntaxComboBox = new QComboBox(this);
        syntaxComboBox->addItem("Regular expression", QRegExp::RegExp);
        syntaxComboBox->addItem("Wildcard", QRegExp::Wildcard);
        syntaxComboBox->addItem("Fixed string", QRegExp::Wildcard);
    
        QHBoxLayout *filterLayout = new QHBoxLayout;
        filterLayout->addWidget(filterLabel);
        filterLayout->addWidget(filterLineEdit);
        QHBoxLayout *patternlayout = new QHBoxLayout;
        patternlayout->addWidget(patternLabel);
        patternlayout->addWidget(syntaxComboBox);
        QVBoxLayout *mainLayout = new QVBoxLayout;
        mainLayout->addWidget(listView);
        mainLayout->addLayout(filterLayout);
        mainLayout->addLayout(patternlayout);
    
        setLayout(mainLayout);
        connect(syntaxComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(reapplyFilter()));
        connect(filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(reapplyFilter()));
    }
    
    void Dialog::reapplyFilter()
    {
        QRegExp::PatternSyntax syntax = QRegExp::PatternSyntax(syntaxComboBox->itemData(
                                        syntaxComboBox->currentIndex()).toInt());
        QRegExp regExp(filterLineEdit->text(), Qt::CaseInsensitive, syntax);
        proxyModel->setFilterRegExp(regExp);
    }
    


     

     

  • 相关阅读:
    CF384 div2 E. Vladik and cards
    学习Opencv Chat3
    Octave 命令积累
    Python学习-31.Python中集合的一些操作
    Python学习-30.Python中的元组(tuple)
    Python学习-29.Python中列表的一些操作
    Python学习-28.Python中的列表切片
    Python学习-27.Python中的列表(list)
    Python学习-26.Python中的三角函数
    Python学习-25.Python中的分数
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648209.html
Copyright © 2011-2022 走看看