QT中级--颜色名称过滤应用程序(MVC)项-视图-控制类

43 篇文章 8 订阅
qt--颜色名称过滤应用程序(MVC)项-视图-控制类

//在这个项目里利用了像视图(MVC)类进行的,t中定义了好多项视图类QListWidget,QTableWidget,qtreewidget;

通常我们都是把数据嵌入项视图里面,但是对于对大数据图形展示,用这种就有点吃力了,因此利用qt自带了(MVC)类就有必要了。

QStringListModel 存储一个字符串列表

QStandardItenModel 存储任意分层次的数据

QDirModel 封装本地文件系统目录

QSortFilterProxyModel排序和筛选另一个模型

实现效果;列举颜色名称,通过输入框进行筛选颜色


//头文件 
#ifndef COLORNAMESDIALOG_H
#define COLORNAMESDIALOG_H
 
#include <qtwidgets/QDialog>
#include <qtwidgets/QtWidgets>
class QComboBox;
class QLabel;
class QLineEdit;
class QListView;
class QSortFilterProxyModel;
class QStringListModel;
 
class ColorNamesDialog : public QDialog
{
    Q_OBJECT
 
public:
    ColorNamesDialog(QWidget *parent = 0);
 
private slots:
    void reapplyFilter();
 
private:
    QStringListModel *sourceModel;
    QSortFilterProxyModel *proxyModel;
    QListView *listView;
    QLabel *filterLabel;
    QLabel *syntaxLabel;
    QLineEdit *filterLineEdit;
    QComboBox *syntaxComboBox;
};
 

#endif

//源文件

#include <QtGui>
 
#include "colornamesdialog.h"
 
ColorNamesDialog::ColorNamesDialog(QWidget *parent)
    : QDialog(parent)
{
    sourceModel = new QStringListModel(this);  //定义一个字符链表model
    sourceModel->setStringList(QColor::colorNames()); //加入把所有的颜色名字到链表
 
    proxyModel = new QSortFilterProxyModel(this); //设置排序类moduel
    proxyModel->setSourceModel(sourceModel);  //把stringmodel添加到procModel中
    proxyModel->setFilterKeyColumn(0); 
 
    listView = new QListView;  //创建一个qlistview用于展示model
    listView->setModel(proxyModel);  //生效
    listView->setEditTriggers(QAbstractItemView::NoEditTriggers); //不可编辑
 
    filterLabel = new QLabel(tr("&Filter:"));//添加两个label
    filterLineEdit = new QLineEdit;
    filterLabel->setBuddy(filterLineEdit);
 
    syntaxLabel = new QLabel(tr("&Pattern syntax:"));
    syntaxComboBox = new QComboBox;
    syntaxComboBox->addItem(tr("Regular expression"), QRegExp::RegExp);
    syntaxComboBox->addItem(tr("Wildcard"), QRegExp::Wildcard);
    syntaxComboBox->addItem(tr("Fixed string"), QRegExp::FixedString);
    syntaxLabel->setBuddy(syntaxComboBox);
 
    connect(filterLineEdit, SIGNAL(textChanged(const QString &)),
            this, SLOT(reapplyFilter()));
//只要有改变就调reapplyFilter()函数进行筛选,具体进入函数内部了解
    connect(syntaxComboBox, SIGNAL(currentIndexChanged(int)),
            this, SLOT(reapplyFilter())); 
 
    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->addWidget(listView, 0, 0, 1, 2);
    mainLayout->addWidget(filterLabel, 1, 0);
    mainLayout->addWidget(filterLineEdit, 1, 1);
    mainLayout->addWidget(syntaxLabel, 2, 0);
    mainLayout->addWidget(syntaxComboBox, 2, 1);
    setLayout(mainLayout);
 
    setWindowTitle(tr("Color Names"));
}
 
void ColorNamesDialog::reapplyFilter()
{
    QRegExp::PatternSyntax syntax = //定义qt正则表达式
            QRegExp::PatternSyntax(syntaxComboBox->itemData(
                    syntaxComboBox->currentIndex()).toInt());
    QRegExp regExp(filterLineEdit->text(), Qt::CaseInsensitive, syntax); //加载,大小写敏感
    proxyModel->setFilterRegExp(regExp); //把proxymodes加载筛选性质
}

//主函数

 
#include <qtwidgets/QApplication>
 
#include "colornamesdialog.h"
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    ColorNamesDialog dialog;
    dialog.show();
    return app.exec();
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值