郁闷了好长时间,QQ列表怎么做呢,前一篇文章说想重写QTreeView,还要写个库,有点说大话了。其实一开始我就被骗了。因为当我看QQ列表的第一印象是用List,第2印象是用TreeView,第三我就悲剧了,想重新实现TreeView的函数。可能是可行的但是,不下一番功夫做不来,或者说是不可行的。TreeView 跟本做不了QQ列表! 最简单的方法是用QListView,或者 QListWidget,下面的简单代码是用QListWidget实现的。原来QQ列表很好做。 可能有疑问,QQ列表带収放的功能,QLisView没有啊,TreeView前面有个小箭头。QListView也没有。其实我们被骗了。小箭头也是ListView上的一个Item 只不过贴上图了而已。 因为只做示范,代码会有很多不规范的。但是大致思想是这样子的 QListWidgetItem*item1=newQListWidgetItem; QListWidgetItem*item2=newQListWidgetItem; item1->setIcon(QIcon(QPixmap("好不好.jpg"))); item2->setIcon(QIcon(QPixmap("1000.jpg"))); item->setSizeHint(QSize(20,20));//这个函数超重要,因为他实现的功能让我找了一天。不然的没法设置item大小。重写函数也没法做到(我找不到 ^.^) widget->setIconSize(QSize(40,40)); //widget QListWidget widget->addItem(item); // item 是全局的 以为要他在槽中响应,改变图标,左三角和又三角 widget->addItem(item1); widget->addItem(item2); connect(widget,SIGNAL(clicked(QModelIndex)),this,SLOT(switchClicked(QModelIndex)));//文档里有 voidMainWindow::switchClicked(QModelIndexindex) { if(flag)item->setIcon(QIcon(QPixmap("he.jpg"))); //小箭头 elseitem->setIcon(QIcon(QPixmap("xia.jpg"))); if(index.row()==0){ //找到哪个item按下 qDebug()<<"0row"; widget->setRowHidden(1,flag); // 这句话是思想的核心。没有他做不来収放的假象。也是我为什么一开始判断错误的原因 widget->setRowHidden(2,flag); //有时候好的想法真的超过学好几天要学的知识。 flag=!flag;qDebug()<<flag;} //flag bool } 基本上完成了 代码不全 主要是用到了setRowHidden和setSizeHint,setIconSize 重要函数,图标大小要用,item大小要用,item隐藏显示要用。其实知道这3个函数 其他的不重要了。 程序简单,开始是我想复杂了,被骗了好几天呢。 hide show 就能Tree的效果~! 例外 选择 QListWidget还有个好处就是 setItemWidget的函数,可以添加控件,比如你的一个Item上不能只写一行字吧,是不是有点单调啊。 这是可以把label加进去,用前文中字符串换行的例子 即可实现一个item 两行字, 需要注意的是这个函数要放在addItem后面写。 如果想写好点的QQ列表建议用QListView 需要 重写QItemDelegate。这就要靠自己的设计了,QItemDelegate不错哦,你想加什么控件都能加上。不过MVC的结构的掌握好。 |
Qt制作QQ好友列表
最新推荐文章于 2024-06-25 14:48:31 发布