您的位置:首页 > 运维架构 > 网站架构

自定义模型SearchModel ------ Model-View-Control(MVC)架构(8)

2014-07-31 20:50 495 查看
上几篇博客里,作为模型的数据都是在模型的构造函数里静态添加的,然后运行程序都没任何问题,似乎一切都很完美。

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也进行了修改,效果也一样。究竟问题出在什么地方呢?请参见下篇博客的解决办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: