Qt MV架构 数据-窗口映射器

时间:2024-07-13 18:23:20

一、基本概念

数据-窗口映射器QDataWidgetMapper类在数据模型的一个区域和一个窗口部件间提供了一个映射,这样就可以实现在一个窗口部件上显示和编辑一个模型中的一行数据。

二、代码示例

#include <QDataWidgetMapper>
#include <QStandardItemModel>

//然后在构造函数中添加如下代码:
{
	QStandardItemModel *model = new QStandardItemModel(3, 2, this);
	model->setItem(0, 0, new QStandardItem("xiaoming"));
	model->setItem(0, 1, new QStandardItem("90"));
	model->setItem(1, 0, new QtandardItem("xiaogang"));
	model->setItem(1, 1, new QStandardItem("75"));
	model->setItem(2, 0, new QStandardItem("xiaohong"));
	model->setItem(2, 1, new QStandardItem("80"));
	
	m_mapper = new QDataWidgetMapper(this);
	
	//设置模型
	m_mapper->setModel(model);

	//设置窗口部件和模型中的列的映射
	m_mapper->addMapping(ui->lineEdit, 0);
	m_mapper->addMapping(ui->lineEdit_2, 1);

	//显示模型中的第一行
	m_mapper->toFirst();
}

上面创建了一个QDataWidgetMapper实例,然后为其设置了关联的模型,并设置了窗口部件和模型中对应列的映射,最后使用toFirst()函数来显示模型中第一行的数据。

下来再增加两个按钮,“上一条”和“下一条”,它们的槽函数如下:

void MainWindow::on_pushbutton_clicked()
{
	m_mapper->toPrevious();
}
void MaiWindow::on_pushbutton2_clicked()
{
	m_mapper->toNext();
}

分别使用了toPrevious()toNext()函数来显示模型中上一行和下一行的数据。

还有一个toLast()函数可以显示模型中嘴鸥一行的数据。

关于QDataWidgetMapper类的使用,也可以参考Simple Widget Mapper和Combo Widget Mapper示例程序,它们在Item Views分类中。


参考资料:Qt Creator快速入门 (霍亚飞 著)