做界面开发呢不免会遇到表格、树等等展示页面,这种情况下Qt开发呢就会用到MVC模式。我相信做界面开发的对MVC模式不陌生,但是在Qt中把C(controller)弱化了,叫MVD更合适,model、view及delegate。model负责数据,view负责展示数据,degelate负责协调model和view的数据。view不直接接触数据,而是从model中获取,各司其职。我们要写自己的model、view、delegate等只需要继承就可以。
Qt的“MVD”模式的结构大概如下图:
这样的框架好处是很明显的:
- 高重用性:一个模型可以有多个视图,同样一个视图也可以对应多个模型
- 低耦合:因为模型与视图分离,所以可以独立的拓展和修改而不产生相互的影响
- 快速开发和便捷部署
举个最简单的例子,并不是完整的代码只是mvd的设置方式,如下。
{
QStandardItemModel model(4, 2);
QTableView tableView;
tableView.setModel(&model);
SpinBoxDelegate delegate;
tableView.setItemDelegate(&delegate);
for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 2; ++column) {
QModelIndex index = model.index(row, column, QModelIndex());
model.setData(index, QVariant((row+1) * (column+1)));
}
}
更多知识可以查看Qt帮助文档。