当前位置: 首页 > wzjs >正文

环保工程东莞网站建设广点通

环保工程东莞网站建设,广点通,生活门户网站开发方案,专业官网设计效果如下: 1、首先我们要设置QListWidget的ViewMode为图片模式IconMode 2、然后确定每个item的大小,重写代理的sizeHint函数 QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override{//假如整个QListW…

效果如下:

1、首先我们要设置QListWidget的ViewMode为图片模式IconMode

2、然后确定每个item的大小,重写代理的sizeHint函数

QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override{//假如整个QListWidget每行显示4个item,那么每个item的宽度就是整个QListWidget的宽度减去右边的间距(这里还多减了10px,一行才显示了4个,Qt Bug)//然后除以4,得到每个item的宽度//然后每个item以正方形为区域//返回每个item的尺寸//但是绘制的时候为了显示间距,在每个item的区域绘制时不绘制满,而是将矩形的左上角往内缩spacing的距离int width = (option.widget->width()-spacing-10) / 4;qDebug()<<"widget with:"<<option.widget->width();qDebug()<<"item with:"<<width;return QSize(width, width);}

3、然后重写代理的paint函数

void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override{painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing);//每行4个 正方形//绘制区域:将item实际矩形区域的左上角往内缩spacing的距离QRect rect = option.rect.adjusted(spacing, spacing, 0, 0);//绘制图像painter->save();QPixmap pixmap = index.data(Qt::UserRole+1).value<QPixmap>();//得到item的图片数据QSize pixmapSize = pixmap.size();pixmapSize.scale(rect.size(), Qt::KeepAspectRatio);QRect scaledRect(QPoint(0, 0), pixmapSize);//得到图片等比例缩放的矩形scaledRect.moveTopLeft(rect.topLeft());//将图片缩放后的矩形移动到和绘制局域的左上角重合painter->drawPixmap(scaledRect.adjusted(2,2,-2,-2), pixmap);//整体往内缩2px,给边框留空间painter->restore();painter->save();if (option.state.testFlag(QStyle::State_Selected)){//选中,绘制轮廓线painter->setBrush(Qt::NoBrush);QPen pen;pen.setStyle(Qt::SolidLine);pen.setColor(QColor("#ff0000"));pen.setWidth(2);painter->setPen(pen);painter->drawRect(scaledRect);}painter->restore();}

 

 完整代码如下:

#ifndef CUSTOMDELETEGATEFORLISTVIEW_H
#define CUSTOMDELETEGATEFORLISTVIEW_H#include <QStyledItemDelegate>
#include <QPainter>
#include<QDebug>class CustomDeletegateForListView :public QStyledItemDelegate
{Q_OBJECT
public:CustomDeletegateForListView(QObject* parent = nullptr):QStyledItemDelegate(parent){}~CustomDeletegateForListView() = default;protected://重写sizeHint函数,这个函数返回的尺寸决定了每个Item的矩形局域的大小QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override{//假如整个QListWidget每行显示4个item,那么每个item的宽度就是整个QListWidget的宽度减去右边的间距(这里还多减了10px,一行才显示了4个,Qt Bug)//然后除以4,得到每个item的宽度//然后每个item以正方形为区域//返回每个item的尺寸//但是绘制的时候为了显示间距,在每个item的区域绘制时不绘制满,而是将矩形的左上角往内缩spacing的距离int width = (option.widget->width()-spacing-10) / 4;qDebug()<<"widget with:"<<option.widget->width();qDebug()<<"item with:"<<width;return QSize(width, width);}void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override{painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing);//每行4个 正方形//绘制区域:将item实际矩形区域的左上角往内缩spacing的距离QRect rect = option.rect.adjusted(spacing, spacing, 0, 0);//绘制图像painter->save();QPixmap pixmap = index.data(Qt::UserRole+1).value<QPixmap>();//得到item的图片数据QSize pixmapSize = pixmap.size();pixmapSize.scale(rect.size(), Qt::KeepAspectRatio);QRect scaledRect(QPoint(0, 0), pixmapSize);//得到图片等比例缩放的矩形scaledRect.moveTopLeft(rect.topLeft());//将图片缩放后的矩形移动到和绘制局域的左上角重合painter->drawPixmap(scaledRect.adjusted(2,2,-2,-2), pixmap);//整体往内缩2px,给边框留空间painter->restore();painter->save();if (option.state.testFlag(QStyle::State_Selected)){//选中,绘制轮廓线painter->setBrush(Qt::NoBrush);QPen pen;pen.setStyle(Qt::SolidLine);pen.setColor(QColor("#ff0000"));pen.setWidth(2);painter->setPen(pen);painter->drawRect(scaledRect);}painter->restore();}
private:int spacing = 10;//每个网格之间的间距,这个值可以更改
};
#endif // CUSTOMDELETEGATEFORLISTVIEW_H

不支持随着QListWidget的缩放,显示的item也跟着缩放

只能在resizeEvent中将原来的delegate删除,new一个新的delegate设置进去

http://www.dtcms.com/wzjs/353277.html

相关文章:

  • 上海装修公司排名391企业网站建设优化
  • 网站做系统叫什么软件专业的网络推广
  • 下载 做网站的原型文件百度sem竞价托管
  • 怎么做自己的网站?微信小程序平台官网
  • 如何在外管局网站做付汇延期百度上如何发广告
  • 软件定制开发优势seo网页的基础知识
  • 公司网页宣传百度seo学院
  • 云南网站开发网络公司站长工具seo综合查询论坛
  • 曲周专业做网站网站建站设计
  • 怎么做一款网站微信软文怎么写
  • wordpress 千万级数据重庆seo多少钱
  • 武汉网站推广建设临沂google推广
  • 徐州网站建设xzwzjs新闻热点事件2024最新
  • 网站内容的设计日照seo优化
  • 网站建设优化服务如何网址提交百度
  • 信用门户网站建设观摩seo基础知识考试
  • 无锡企业网站公司火蝠电商代运营公司
  • java购物网站建设网站搭建源码
  • 定制网站开发多少钱成都网络优化公司有哪些
  • 网站 运营 外包 每个月多少钱西安百度推广优化托管
  • 简约大气网站欣赏360安全网址
  • 附近学电脑培训班seo查询爱站
  • 建设手表商城网站多少钱seowhy
  • 网站移动端建设市场推广怎么做
  • 宁波网络营销咨询百度seo插件
  • 雕刻机做外贸都是哪些网站百度seo搜搜
  • 包装材料营销型网站百度招聘网最新招聘信息
  • 外贸产品网站建设哪里能买精准客户电话
  • 顺德网站制作案例价格丽水百度seo
  • 启东网站建设百度免费打开