Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)...
Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)
今天再次分析了Eva的源码,也看了qt3中QListView和QListViewItem手册,在Eva中实现item paint的方式如下:
void EvaListViewItem::paintCell( QPainter * painter, const QColorGroup & colourGroup, int column, int width, int align )
{if( ! isVisible() ) return;if ( column == 0){QBrush *brush;QPalette palette;EvaListView *lv = dynamic_cast<EvaListView *> (listView());if( !lv ) return;palette = lv->viewport()->palette();brush = 0;const BackgroundMode bgmode = lv->viewport()->backgroundMode();const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode );if ( colourGroup.brush( crole ) != lv->colorGroup().brush( crole ) )painter->fillRect( 0, 0, width, height(), colourGroup.brush( crole ) );elselv->paintEmptyArea( painter, QRect( 0, 0, width, height() ) );if ( isSelected() ) {brush = new QBrush( palette.color(QPalette::Active, QColorGroup::Highlight) );// painter->setPen( palette.color(QPalette::Active, QColorGroup::Text) );} else {// painter->setPen( palette.color(QPalette::Normal, QColorGroup::Text) );}int icon_width = 0;if(m_icon){icon_width = lv->itemMargin() + m_icon->width();}// TODO: Change the font for highlighted textm_richText->draw( painter, lv->itemMargin() + icon_width, 0, QRect( icon_width, 0, width, height() ), colourGroup, brush );//setHeight( m_RichText->height() );if(m_icon){int xo = lv->itemMargin();int yo = ( height() - m_icon->height() ) / 2;painter->drawPixmap( xo, yo, *m_icon );}int height = m_richText->height();if(m_icon && m_icon->height() > m_richText->height()){height = m_icon->height();}height += 4;setHeight( height );widthChanged( 0 );delete brush;} else {QListViewItem::paintCell( painter, colourGroup, column, width, align );}
}
注:上面的QListViewItem中qt4中应该改为Q3ListViewItem
再分析了Qt4中的QListWidget和QTreeWidget,得出的结论是:在qt4中qt放弃了对如Qt3中对Listview和ListViewItem的支持,在看Qt3的手册的时候可以看到:
void QListView::insertItem ( QListViewItem * i ) [virtual]
Inserts item i into the list view as a top-level item. You do not need to call this unless you've called takeItem(i) or QListViewItem::takeItem(i) and need to reinsert i elsewhere.
有insertItem函数。再看看qt4中的某一个Q*Widget,比如就是QListWidget:
void QListWidget::insertItem ( int row, QListWidgetItem * item )
Inserts the item at the position in the list given by row.
See also addItem().
可以看到他们就是一致的,不妨在看看QTreeWidget:
void QTreeWidget::insertTopLevelItem ( int index, QTreeWidgetItem * item )
Inserts the item at index in the top level in the view.
If the item has already been inserted somewhere else it wont be inserted.
也有类似的操作。
我们知道在qt4中要像view中加入数据,就要使用qt4特有的interview框架的model/view机制。但是在qt3中向view中加入数据(item)就有直接的insert函数,在qt4中的Q*Widget也有类似的insert函数,所以:
在qt4中把qt3中类似的view的insertItem函数和class演变成了Qt4中的Q*Widget,当然他们的实现功能几乎没有太大不一样。
转载于:https://www.cnblogs.com/Podevor/archive/2011/10/08/2788022.html
Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)...相关推荐
- Android学习笔记-常用的一些源码,防止忘记了
Android学习笔记-常用的一些源码,防止忘记了... 设置拨打电话 StringdialUri="tell:"+m_currentTelNumble; IntentcallIn ...
- QT学习之经典控件源码(如此强大)
进来好好学习了QT,研究了很多别人的源码,在绘图方面原来QT也是如此强大! 源码下载: /Files/feiya ...
- Netty学习笔记(一)Netty客户端源码分析
最近在学些BIO,NIO相关的知识,也学习了下Netty和它的源码,做个记录,方便以后继续学习,如果有错误的地方欢迎指正 如果不了解BIO,NIO这些基础知识,可以看下我的如下博客 IO中的阻塞.非阻 ...
- Nginx学习笔记(五) 源码分析内存模块内存对齐
Nginx源码分析&内存模块 今天总结了下C语言的内存分配问题,那么就看看Nginx的内存分配相关模型的具体实现.还有内存对齐的内容~~不懂的可以看看~~ src/os/unix/Ngx_al ...
- PyQt5学习笔记03----Qt Designer生成源码
下面来分析一下Qt Designer生成的源码. Qt Designer制作的图形界面为 生成的代码如下 [python] view plaincopy from PyQt5 import QtCor ...
- 【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server
作者:施洪宝 顺风车运营研发团队 一. 压缩列表 压缩列表是Redis的关键数据结构之一.目前已经有大量的相关资料,下面几个链接都已经对Ziplist进行了详细的介绍. http://origin.r ...
- Laravel 学习笔记之 Query Builder 源码解析(下)
说明:本文主要学习下Query Builder编译Fluent Api为SQL的细节和执行SQL的过程.实际上,上一篇聊到了\Illuminate\Database\Query\Builder这个非常 ...
- Shiro学习笔记(三)源码解析
Shiro作为轻量级的权限框架,Shiro的认证流程是怎样的一个过程. 如果没有对Shiro进行了解的话,建议先对Shiro学习笔记(一)学习一下Shiro基本的组 成. 1,几大重要组件解析 1.1 ...
- [Java Path Finder][JPF学习笔记][4]将JPF源码导入Eclipse
这篇日志很简单,考虑到有些师弟在学习JPF,这里总结些经验. 在Eclipse中新建"Java Project",在新建的Project的src图标上点击右键--"Imp ...
最新文章
- 论文标题,这么写才算好!
- java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
- html5 测试用例,Web 测试通用测试用例
- typora-setup-x64.exe下载
- 李宁是怎么输给安踏的?
- 打破传统内容生产 易车玩转综艺原创
- python的random模块怎么写_Python常用标准库之random模块
- 运行Docker时不加sudo
- “一路有你”——迷你TXT小说阅读器 V2.8 正式版 发布!
- Django项目实践(商城):十七、商品详情页面
- Python与MySQL交互——简易用户注册登录
- android 壁纸软件 宝宝,宝宝巴士桌面软件下载
- OGEM Solids Control Drilling oil fluid mud purification process
- 【读书笔记】编程实操-位和字节(七)
- 对地球生命的来源持有怀疑
- 前端开发,JavaScript实际开发过程中常用JS小技巧
- Android学习笔记(十)——Activity的四种启动模式
- 写项目立项报告的总结
- html+css书店
- dasdsadsad