回复: QtRSSReader(alpha3.0 更新)
#31 [wvins 05-21 11:26]
哈哈,谢谢捧场。
另外,谢谢你帮忙修改文件名的大小写
不能添加频道大概是因为设置了Proxy。你可以在设置里面取消Proxy的设置。
因为Proxy导致的网络访问失败,没有返回信息,所以没有弹出出错对话框。
#32 [wvins 05-30 21:34]
关于Model-View方式导致的程序异常,及解决方案记录。
也希望有经验的同志能给点意见。
这样QTableView就加入了selectionChanged的支持,以及Sort和Filter的支持。
今天在使用中发现,SortFilterProxyModel和ListModel的行为不太一致,导致程序异常。
我的数据通过ListModel的addItems方法添加。
奇怪的是,ListModel的rowCount和SortFilterProxyModel的rowCount存在差距,SortFilterProxyModel的rowCount始终多2个。
这就导致拉动QTableView的滚动条,滚动到不存在的记录时,程序异常退出。
---------------------
无奈之下,使用了下面变态的解决方案,在addItems的结尾重新设置下源Model
proxyModel->setSourceModel(rssModel);
。。。
---------------------
看到这个图有个想法,大概我的addItems在一个错误的地点实现了。
或许应该在SortFilterProxyModel中提供这个功能,因为他才QTableView实际的Model。
---------------------
BTW:
我修改了addItems的实现,在改变之前是没有这么严重的Bug~
原实现如下(单条插入的方式):
void ListModel::addItem(ListItem *item)
{
beginInsertRows(QModelIndex(), rssItems->count(), rssItems->count());
rssItems->append(item);
endInsertRows();
}
新的实现(批量插入):
void ListModel::addItems(QSqlQuery &query)
{
int querySize = 0;
while(query.next() && ++querySize);
ListItem *item;
beginInsertRows(QModelIndex(), 0, querySize);
query.seek(-1);
while (query.next())
{
item = new ListItem;
item->setValue(query.record());
rssItems->append(item);
}
endInsertRows();
}
#33 [channon 09-30 14:17]
http://www.qtcn.org/bbs/read.php?tid=18732&keyword=rss
这个开源项目不知道还在不在维护了
#34 [wvins 10-15 09:33]
那个你可以上他们的网站上去看看,
QtRSSReader断断续续的在修改一些Bug,美化,不过改动不大。
#35 [neil-wen 08-18 19:42]
不错,值得顶一下