QtCreator 代理模型(QSortFilterProxyModel),数据窗口映射器(QDataWidgetMapper)

本文介绍如何在Qt中使用QSortFilterProxyModel作为代理模型进行数据过滤,并展示了QDataWidgetMapper的应用,用于实现界面元素与数据模型之间的双向绑定。

1 代理模型

1.1 在界面文件中添加代理模型

1.1.1 前置声明

class QSortFilterProxyModel;

1.1.2 添加QSortFilterProxyModel私有变量

    QSortFilterProxyModel *filterModel;
1.1.3 在界面文件中为视图设置代理模型

    //准备源模型
    QStringList list;
    list << "yafei" << "yafeilinux" << "qt" << "qt Creato";
    QStringListModel *listModel = new QStringListModel(list,this);
    
    //为代理添加源模型
    filterModel = new QSortFilterProxyModel(this);
    filterModel->setSourceModel(listModel);

    //在视图中使用代理模型
    ui->listView->setModel(filterModel);
1.1.4 为按钮设置过滤功能

void MainWindow::on_pushButton_clicked()
{
    QRegExp rx(ui->lineEdit->text());
    filterModel->setFilterRegExp(rx);
}


2 数据——窗口映射器

2.1 在界面头文件中

在界面中添加映射器

    class QDataWidgetMapper;

    QDataWidgetMapper *mapper;

在界面实现文件cpp中构造函数中

    QStandardItemModel *model = new QStandardItemModel(3,2);
    model->setItem(0,0, new QStandardItem("xiaoming"));
    model->setItem(0,1,new QStandardItem("90"));
    model->setItem(1,0,new QStandardItem("xiaoqiang"));
    model->setItem(1,1,new QStandardItem("75"));
    model->setItem(2,0,new QStandardItem("xiaohong"));
    model->setItem(2,1,new QStandardItem("80"));
    mapper = new QDataWidgetMapper(this);

    //设置模型
    mapper->setModel(model);

    //设置窗口部件和模型的列的映射
    mapper->addMapping(ui->uLineEdit,0);
    mapper->addMapping(ui->gLineEdit,1);

    mapper->toFirst();//显示第一行
为按钮添加功能

void MainWindow::on_pushButton_clicked()
{
    mapper->toPrevious();
}

void MainWindow::on_pushButton_2_clicked()
{
    mapper->toNext();
}


运行界面



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值