前言
一个简单的文本过滤器,使用正则表达式语法过滤文本信息
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();
}