日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt工作笔记-自定义QSortFilterProxyModel实现多列分别过滤

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt工作笔记-自定义QSortFilterProxyModel实现多列分别过滤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序運行截圖如下:

原理,重寫QSortFilterProxyModel類中的filterAcceptsRow即可:

源碼如下:

mysortfilterproxymodel.h

#ifndef MYSORTFILTERPROXYMODEL_H #define MYSORTFILTERPROXYMODEL_H#include <QSortFilterProxyModel> #include <QRegExp>class MySortFilterProxyModel : public QSortFilterProxyModel {Q_OBJECT public:MySortFilterProxyModel(QObject *parent = 0);void setRxCol1(const QString rx);void setRxCol2(const QString rx);protected:bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const Q_DECL_OVERRIDE;private:QString m_rxCol1;QString m_rxCol2;};#endif // MYSORTFILTERPROXYMODEL_H

widget.h

#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE class QStandardItemModel; class QSortFilterProxyModel; QT_END_NAMESPACEclass MySortFilterProxyModel;namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected slots:void col1LineEditChanged(const QString text);void col2LineEidtChanged(const QString text);protected:void intsertModel(const int row, const int col, const QString data);private:Ui::Widget *ui;QStandardItemModel *m_model;MySortFilterProxyModel *m_filterModel; };#endif // WIDGET_H

main.cpp

#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }

mysortfilterproxymodel.cpp

#include "mysortfilterproxymodel.h" #include <QModelIndex> #include <QDebug>MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent) : QSortFilterProxyModel(parent) {m_rxCol1 = "";m_rxCol2 = ""; }void MySortFilterProxyModel::setRxCol1(const QString rx) {m_rxCol1 = rx; }void MySortFilterProxyModel::setRxCol2(const QString rx) {m_rxCol2 = rx; }bool MySortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const {QModelIndex index0 = sourceModel()->index(source_row, 0, source_parent);QModelIndex index1 = sourceModel()->index(source_row, 1, source_parent);return (sourceModel()->data(index0).toString().contains(m_rxCol1)&& sourceModel()->data(index1).toString().contains(m_rxCol2)); }

widget.cpp

#include "widget.h" #include "ui_widget.h" #include "mysortfilterproxymodel.h" #include <QStandardItemModel> #include <QRegExp> #include <QDebug> #include <QSortFilterProxyModel>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("CSDN IT1995");m_model = new QStandardItemModel;m_filterModel = new MySortFilterProxyModel;QStringList headList;headList << "第一列" << "第二列" << "第三列" << "第四列";m_model->setHorizontalHeaderLabels(headList);ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);for(int row = 0; row < 100; row++){for(int col = 0; col < 4; col++){intsertModel(row, col, "第" + QString::number(row) + "行,第" + QString::number(col) + "列");}}intsertModel(100, 0, "中文");intsertModel(100, 1, "China");intsertModel(100, 2, "japan");intsertModel(100, 3, "日本人");intsertModel(101, 0, "中文");intsertModel(101, 1, "東京");intsertModel(101, 2, "東京熱");intsertModel(101, 3, "東京冷");connect(ui->colOneLineEdit,SIGNAL(textEdited(QString)), this, SLOT(col1LineEditChanged(QString)));connect(ui->colTwoLineEdit,SIGNAL(textEdited(QString)), this, SLOT(col2LineEidtChanged(QString)));m_filterModel->setSourceModel(m_model);ui->tableView->setModel(m_filterModel); }Widget::~Widget() {delete ui; }void Widget::col1LineEditChanged(const QString text) {m_filterModel->setRxCol1(text);m_filterModel->setSourceModel(m_model); }void Widget::col2LineEidtChanged(const QString text) {m_filterModel->setRxCol2(text);m_filterModel->setSourceModel(m_model); }void Widget::intsertModel(const int row, const int col, const QString data) {QStandardItem *newItem = new QStandardItem(data);newItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);m_model->setItem(row, col, newItem); }

?

總結

以上是生活随笔為你收集整理的Qt工作笔记-自定义QSortFilterProxyModel实现多列分别过滤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。