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)...相关推荐

  1. Android学习笔记-常用的一些源码,防止忘记了

    Android学习笔记-常用的一些源码,防止忘记了... 设置拨打电话 StringdialUri="tell:"+m_currentTelNumble; IntentcallIn ...

  2. QT学习之经典控件源码(如此强大)

    进来好好学习了QT,研究了很多别人的源码,在绘图方面原来QT也是如此强大!                                             源码下载: /Files/feiya ...

  3. Netty学习笔记(一)Netty客户端源码分析

    最近在学些BIO,NIO相关的知识,也学习了下Netty和它的源码,做个记录,方便以后继续学习,如果有错误的地方欢迎指正 如果不了解BIO,NIO这些基础知识,可以看下我的如下博客 IO中的阻塞.非阻 ...

  4. Nginx学习笔记(五) 源码分析内存模块内存对齐

    Nginx源码分析&内存模块 今天总结了下C语言的内存分配问题,那么就看看Nginx的内存分配相关模型的具体实现.还有内存对齐的内容~~不懂的可以看看~~ src/os/unix/Ngx_al ...

  5. PyQt5学习笔记03----Qt Designer生成源码

    下面来分析一下Qt Designer生成的源码. Qt Designer制作的图形界面为 生成的代码如下 [python] view plaincopy from PyQt5 import QtCor ...

  6. 【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server

    作者:施洪宝 顺风车运营研发团队 一. 压缩列表 压缩列表是Redis的关键数据结构之一.目前已经有大量的相关资料,下面几个链接都已经对Ziplist进行了详细的介绍. http://origin.r ...

  7. Laravel 学习笔记之 Query Builder 源码解析(下)

    说明:本文主要学习下Query Builder编译Fluent Api为SQL的细节和执行SQL的过程.实际上,上一篇聊到了\Illuminate\Database\Query\Builder这个非常 ...

  8. Shiro学习笔记(三)源码解析

    Shiro作为轻量级的权限框架,Shiro的认证流程是怎样的一个过程. 如果没有对Shiro进行了解的话,建议先对Shiro学习笔记(一)学习一下Shiro基本的组 成. 1,几大重要组件解析 1.1 ...

  9. [Java Path Finder][JPF学习笔记][4]将JPF源码导入Eclipse

    这篇日志很简单,考虑到有些师弟在学习JPF,这里总结些经验. 在Eclipse中新建"Java Project",在新建的Project的src图标上点击右键--"Imp ...

最新文章

  1. 论文标题,这么写才算好!
  2. java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
  3. html5 测试用例,Web 测试通用测试用例
  4. typora-setup-x64.exe下载
  5. 李宁是怎么输给安踏的?
  6. 打破传统内容生产 易车玩转综艺原创
  7. python的random模块怎么写_Python常用标准库之random模块
  8. 运行Docker时不加sudo
  9. “一路有你”——迷你TXT小说阅读器 V2.8 正式版 发布!
  10. Django项目实践(商城):十七、商品详情页面
  11. Python与MySQL交互——简易用户注册登录
  12. android 壁纸软件 宝宝,宝宝巴士桌面软件下载
  13. OGEM Solids Control Drilling oil fluid mud purification process
  14. 【读书笔记】编程实操-位和字节(七)
  15. 对地球生命的来源持有怀疑
  16. 前端开发,JavaScript实际开发过程中常用JS小技巧
  17. Android学习笔记(十)——Activity的四种启动模式
  18. 写项目立项报告的总结
  19. html+css书店
  20. dasdsadsad

热门文章

  1. JavaWeb结合七牛云存储搭建个人相册服务
  2. pl/sql过程(一)
  3. Nginx服务的命令行控制
  4. 请解释各种自动装配模式的区别?
  5. Spring 事务core 模块-RowMapper
  6. 基于Redis优化首页轮播图查询
  7. 关于idea右侧的maven project 如何调出来
  8. mysql的length函数和char_length中文字符长度计算函数
  9. spring配置详解-模块化配置
  10. jmetery压力测试工具