Qt 文本过滤器

前言

一个简单的文本过滤器,使用正则表达式语法过滤文本信息

widgetfilter.h

#ifndef WIDGETFILTER_H
#define WIDGETFILTER_H

#include <QDialog>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>

namespace Ui {
class WidgetFilter;
}

class WidgetFilter : public QDialog
{
    Q_OBJECT

public:
    explicit WidgetFilter(QWidget *parent = 0);
    ~WidgetFilter();
    void init(const QStringList &names);
    QString chosenName();

private slots:
    void on_pushButton_ok_clicked();
    void on_pushButton_cancel_clicked();
    void on_lineEdit_textChanged(const QString &arg1);

private:
    Ui::WidgetFilter *ui;
    QStandardItemModel *m_stdModel;
    QSortFilterProxyModel *m_filterModel;
};

#endif // WIDGETFILTER_H

widgetfilter.cpp

#include "widgetfilter.h"
#include "ui_widgetfilter.h"

WidgetFilter::WidgetFilter(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::WidgetFilter)
{
    ui->setupUi(this);

    m_stdModel = new QStandardItemModel;
    m_filterModel = new QSortFilterProxyModel;
    m_filterModel->setSourceModel(m_stdModel);
    ui->listView->setModel(m_filterModel);
}

WidgetFilter::~WidgetFilter()
{
    delete ui;
}

void WidgetFilter::init(const QStringList &names)
{
    m_stdModel->clear();
    for (const QString &n : names) {
        m_stdModel->appendRow(new QStandardItem(n));
    }
}

QString WidgetFilter::chosenName()
{
    QString n;
    QItemSelectionModel *selModel = ui->listView->selectionModel();
    QModelIndexList indexes = selModel->selectedIndexes();
    if (!indexes.isEmpty()) {
        n = indexes.first().data().toString();
    }
    return n;
}

void WidgetFilter::on_pushButton_ok_clicked()
{
    accept();
}

void WidgetFilter::on_pushButton_cancel_clicked()
{
    reject();
}

void WidgetFilter::on_lineEdit_textChanged(const QString &arg1)
{
    m_filterModel->setFilterRegExp(QRegExp(arg1, Qt::CaseInsensitive, QRegExp::RegExp2));
}

界面

在这里插入图片描述

main.cpp

#include "widgetfilter.h"
#include <QApplication>
#include <QDebug>
#include <QMessageBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QStringList names;
    names << "A1" << "A2" << "A3" << "B1" << "C1" <<"D2";

    WidgetFilter w;
    w.init(names);
    if (w.exec() == QDialog::Accepted) {
        QMessageBox::information(0, QString("Chosen Name"), QString("The chosen name is %1").arg(w.chosenName()), QMessageBox::Yes, QMessageBox::Yes);
    }

    return a.exec();
}

结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值