自定义模型SearchModel ------ Model-View-Control(MVC)架构(8)
2014-07-31 20:50
495 查看
上几篇博客里,作为模型的数据都是在模型的构造函数里静态添加的,然后运行程序都没任何问题,似乎一切都很完美。
SearchModel.cpp
但是,程序实际运行下,这些数据都是动态从服务器获取的,客户端收到服务器回传的联系人信息,再动态地添加到模型中,然后再动态地显示在视图里。那么,现在,我们添加上动态添加数据的代码,再次运行。
SearchModel.cpp
SearchFriends.cpp
运行后,我们发现,当从服务器获取第一行数据后的效果如下:
但当从服务器再次获得更多行数据时,新获得的行都叠在了一起:
看似TableView的行高设置不对,但是无论如何设置行高,效果都是一样。而且对Item里的sizeHint也进行了修改,效果也一样。究竟问题出在什么地方呢?请参见下篇博客的解决办法。
SearchModel.cpp
SearchModel::SearchModel(QObject *parent) : QAbstractTableModel(parent) { SearchItem *item1=new SearchItem(0,1,1974,36,1,1,"Tom"); SearchItem *item2=new SearchItem(1,2,1965,37,3,10,"这是个很长很长的名字"); SearchItem *item3=new SearchItem(2,3,1979,35,5,20,"Kitty"); SearchItem *item4=new SearchItem(3,4,1992,38,7,30,"Alice"); QList<SearchItem*> list1; list1.append(item1); list1.append(item2); list1.append(item3); list1.append(item4); SearchItem *item5=new SearchItem(4,5,1983,39,9,40,"Lily"); SearchItem *item6=new SearchItem(5,6,1999,37,13,50,"Mary"); SearchItem *item7=new SearchItem(6,7,1995,37,14,51,"Maggie"); SearchItem *item8=new SearchItem(0,1,1974,36,1,1,"Tom"); QList<SearchItem*> list2; list2.append(item5); list2.append(item6); list2.append(item7); list2.append(item8); list.append(list1); list.append(list2); }
但是,程序实际运行下,这些数据都是动态从服务器获取的,客户端收到服务器回传的联系人信息,再动态地添加到模型中,然后再动态地显示在视图里。那么,现在,我们添加上动态添加数据的代码,再次运行。
SearchModel.cpp
void SearchModel::slot_InsertRow(QList<SearchItem *> newRow) { beginInsertRows(QModelIndex(), list.count(), list.count()); list.append(newRow); insertRow(list.count(),QModelIndex()); endInsertRows(); }在视图文件里的接收到服务器回传数据的槽函数里,我们调用SearchModel里的这个函数添加数据:
SearchFriends.cpp
<pre name="code" class="cpp">void SearchFriends::slot_msg11002RetrieveContacts(QByteArray Contacts) { QList<SearchItem*> newRow; { //。。。。。。省略若干从服务器获取数据的代码 SearchItem* item=new SearchItem(acc, icon, year, nation, province, city, nickname); newRow.append(item); } //...... model->slot_InsertRow(newRow); }
运行后,我们发现,当从服务器获取第一行数据后的效果如下:
但当从服务器再次获得更多行数据时,新获得的行都叠在了一起:
看似TableView的行高设置不对,但是无论如何设置行高,效果都是一样。而且对Item里的sizeHint也进行了修改,效果也一样。究竟问题出在什么地方呢?请参见下篇博客的解决办法。
相关文章推荐
- 自定义模型SearchModel ------ Model-View-Control(MVC)架构(9)
- QListView ------ Model-View-Control(MVC)架构(1)
- 自定义委托(代理)SearchDelegate ------ Model-View-Control(MVC)架构(6)
- QTableView ------ Model-View-Control(MVC)架构(4)
- 自定义SearchItem类 ------ Model-View-Control(MVC)架构(5)
- 各种模型的比较 ------ Model-View-Control(MVC)架构(2)
- 自定义模型SearchModel ------ Model-View-Control(MVC)架构(7)
- QAbstractTableModel ------ Model-View-Control(MVC)架构(3)
- SpingMVC ModelAndView, Model,Control以及参数传递
- 用C#实现MVC(Model View Control)模式介绍
- 用C#实现MVC(Model View Control)模式介绍
- MVC教程:MVC---View处理页面;Control处理业务逻辑;Model处理数据
- 用C#实现MVC(Model View Control)模式介绍
- 用C#实现MVC(Model View Control)模式介绍
- 用C#实现MVC(Model View Control)模式介绍
- SpingMVC ModelAndView, Model,Control以及参数传递
- Introduction to Model View Control (MVC) Pattern using C#
- 用C#实现MVC(Model View Control)模式介绍
- Qt MVC View Model Control /Delegate
- 【框架篇】mvc、mvp、mvvm使用关系总结 原创 2016年03月27日 10:04:21 标签:android /架构 9837 MVC MVC全名是Model View Controller,