设为首页 加入收藏

TOP

QT 列表类型控件(QListWidget等)的代理使用记录(一)
2014-11-24 12:21:33 来源: 作者: 【 】 浏览:2
Tags:类型 控件 QListWidget 代理 使用 记录

最近项目中经常使用QListView,QListWidget等列表类型的空间来做。刚开始时不太了解,现在已经搞得比较熟悉了,不过为了防止如果时间久了不看的话会忘,所以暂时把它写到这里。同时也是为了以后方便查看,当然若有需要了解的人,希望他看了后也得到点收获。具体的代码如下:


#include "setupItemDelegate.h"


#define ICON_PATH QString(qgetenv("PATH"))
//static const int textMargin = 3;
#define SPACE_FOR_ADD_TRIANGLE 20


SettingItem::SettingItemDelegate(QWidget *parent,bool enableTextScrolling)
{
parentWidget = parent;
isEnableTextScrolling = enableTextScrolling;
pixmp.load(QString("%1/setup_ico_focus.png").arg(QString(PATH)));
}
void SettingItem::drawFocus( QPainter * painter, const QStyleOptionViewItem & option, const QRect & rect , QPixmap& pixmap) const
{


}


void SettingItem::paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const
{
Q_ASSERT(index.isValid());


QStyleOptionViewItem opt = option;
//QPen prepen = painter->pen();
//painter->save();


// decoration
QVariant value = index.data(Qt::DecorationRole);
opt.state = QStyle::State_None;
QPixmap pixmap = decoration(opt, value);
QRect pixmapRect = (pixmap.isNull() QRect(0, 0, 0, 0)
: QRect(QPoint(0, 0), option.decorationSize));


// display
QRect textRect;
QString text = index.data(Qt::DisplayRole).toString();
//force textRect = option.rect
textRect = option.rect;


QRect checkRect = QRect(0, 0, 0, 0);


doLayout(option, &checkRect, &pixmapRect, &textRect, false);


if (pixmapRect.isValid())
{
drawDecoration(painter, opt, pixmapRect, pixmap);
if((option.state & QStyle::State_HasFocus) || (option.state & QStyle::State_Selected))
{
//painter->drawPixmap(pixmapRect, pixmp);
QRect rect = option.rect;
rect = rect.adjusted(0, 2, 0, -2);
itemSelFocusGradient.setStart(rect.x(),rect.y());
itemSelFocusGradient.setFinalStop(rect.x(), rect.y()+rect.height());


itemSelFocusGradient.setColorAt(0,QColor(21,69,160));
itemSelFocusGradient.setColorAt(0.3,QColor(33,51,82,50));
itemSelFocusGradient.setColorAt(0.31,QColor(40,40,39,60));
itemSelFocusGradient.setColorAt(0.7,QColor(38,38,39,60));
itemSelFocusGradient.setColorAt(0.71,QColor(24,58,119,50));
itemSelFocusGradient.setColorAt(1,QColor(0,55,170));
QBrush brushsel = itemSelFocusGradient;
painter->save();
painter->setBrush(brushsel);
painter->setPen(QPen(QColor(228,236,244),2,Qt::SolidLine));
painter->drawRoundedRect(rect,10,10);
painter->restore();
}
}



if (!text.isEmpty())
{
//drawDisplay(painter, opt, textRect, text);
if(option.state & QStyle::State_HasFocus)
{
painter->save();
painter->setPen(QColor(247,148,33));
painter->drawText(textRect, Qt::AlignVCenter,text);
painter->restore();
}
/*else if(option.state & QStyle::State_Selected)
{
painter->save();
painter->setPen(QColor(92,118,205));
painter->drawText(textRect, Qt::AlignVCenter,text);
painter->restore();
}*/
else
painter->drawText(tex

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android学习笔记--播放MP3 下一篇Android FrameWork 启动流程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)
·有没有Java swing教 (2025-12-25 15:19:09)
·Start, Stop, and Di (2025-12-25 14:50:57)
·C语言入门教程:零基 (2025-12-25 14:50:54)