有些时候会将多张有相同功能的图片绘制成一张,不管是使用或者绘制上都会方便很多。对美工与开发者来说也都是一件省事、省力、更省心的方式。二全其美,又何乐而不为呢。。。

例如:QQ等级

    0-9可以组成很多种不同的数字等级(不多做解释)!绘制多张图片来描述不同的等级吗?那么请问得绘制多少张呢?想都不敢想。如上方式,已经完全解决了这个问题。

    前提条件:
    美工:制作一张有多张图标相连的图片。
    开发者:只需要根据自己的需求,将部分图片拷贝为副本,再进行合并即可!

下面举个小例子:

#include "qqlevel.h"

QQLevel::QQLevel(QWidget *parent)
: QWidget(parent)
{
setFixedSize(300, 200);
level_button = new QPushButton();
grade_button = new QPushButton();

//分别获取0-9数字图标
QPixmap pixmap_0 = getPixmap(QString(":/level/level_value"), 10, 0);
QPixmap pixmap_1 = getPixmap(QString(":/level/level_value"), 10, 1);
QPixmap pixmap_2 = getPixmap(QString(":/level/level_value"), 10, 2);
QPixmap pixmap_3 = getPixmap(QString(":/level/level_value"), 10, 3);
QPixmap pixmap_4 = getPixmap(QString(":/level/level_value"), 10, 4);
QPixmap pixmap_5 = getPixmap(QString(":/level/level_value"), 10, 5);
QPixmap pixmap_6 = getPixmap(QString(":/level/level_value"), 10, 6);
QPixmap pixmap_7 = getPixmap(QString(":/level/level_value"), 10, 7);
QPixmap pixmap_8 = getPixmap(QString(":/level/level_value"), 10, 8);
QPixmap pixmap_9 = getPixmap(QString(":/level/level_value"), 10, 9);

int count = 3;
int pixmap_width = pixmap_8.width();
int pixmap_height = pixmap_8.height();

//最前面LV图标
QPixmap pixmap_lv(":/level/lv");
int lv_width = pixmap_lv.width();
QPixmap total_pixmap(QSize(pixmap_width*count + lv_width, pixmap_height));
QPainter painter(&total_pixmap);

//绘制LV图标
painter.drawPixmap(QRect(0, 0, lv_width, pixmap_height), pixmap_lv);

//再绘制LV888图标
for(int i=0; i
{
painter.drawPixmap(QRect(lv_width+pixmap_width*i, 0, pixmap_width, pixmap_height), pixmap_8);
}

level_button->setFixedHeight(30);
level_button->setIcon(total_pixmap);
level_button->setIconSize(total_pixmap.size());

//分别获取皇冠、太阳、月亮、星星、...等图标
QPixmap pixmap_grade_0 = getPixmap(QString(":/level/grade"), 5, 0);
QPixmap pixmap_grade_1 = getPixmap(QString(":/level/grade"), 5, 1);
QPixmap pixmap_grade_2 = getPixmap(QString(":/level/grade"), 5, 2);
QPixmap pixmap_grade_3 = getPixmap(QString(":/level/grade"), 5, 3);
QPixmap pixmap_grade_4 = getPixmap(QString(":/level/grade"), 5, 4);

//绘制5个皇冠
int grade_count = 5;
int pixmap_grade_width = pixmap_grade_0.width();
int pixmap_grade_height = pixmap_grade_0.height();
QPixmap total_grade_pixmap(QSize(pixmap_grade_width*grade_count, pixmap_grade_height));
QPainter grade_painter(&total_grade_pixmap);
for(int i=0; i
{
grade_painter.drawPixmap(QRect(pixmap_grade_width*i, 0, pixmap_grade_width, pixmap_grade_height), pixmap_grade_0);
}
grade_button->setFixedHeight(30);
grade_button->setIcon(total_grade_pixmap);
grade_button->setIconSize(total_grade_pixmap.size());


QVBoxLayout *main_layout = new QVBoxLayout();
main_layout->addStretch();
main_layout->addWidget(level_button);
main_layout->addWidget(grade_button);
main_layout->addStretch();
main_layout->setSpacing(20);
main_layout->setContentsMargins(0, 0, 0, 0);

setLayout(main_layout);
}

QQLevel::~QQLevel()
{

}

QPixmap QQLevel::getPixmap(QString pixmap_name, int count, int index)
{
QPixmap final_pixmap;
if(!pixmap_name.isEmpty() && count > 0)
{
QPixmap pixmap(pixmap_name);
int pixmap_width = pixmap.width()/count;
int pixmap_height = pixmap.height();
final_pixmap = pixmap.copy(pixmap_width*index, 0, pixmap_width, pixmap_height);
}

return final_pixmap;
}

运行效果如下:


好了,多张图片的切分与合并完美实现,It's so easy!

Qt之图标切分与合并的更多相关文章

  1. Qt之图标切分与合并(关键是使用QPixmap的copy函数来拷贝整张图片的某个区域)

    有些时候会将多张有相同功能的图片绘制成一张,不管是使用或者绘制上都会方便很多.对美工与开发者来说也都是一件省事.省力.更省心的方式.二全其美,又何乐而不为呢... 例如:QQ等级           ...

  2. Qt中用QSS切分图片

    Qt设计时有时需要实现动态按钮,按钮点击时一个状态,鼠标悬浮时一个状态,离开时一个状态,静止时一个状态.可以用一张png长图,使用QSS分段截取,分配给每一个状态.    1.调用函数 SetButt ...

  3. [Qt] fontawesome图标

    fontawesome图标 fontawesome是一个图标的集合,里面有好多的图标,使用起来也还是非常方便的. 图标信息可以到官网去查:http://fontawesome.io/cheatshee ...

  4. Qt标题栏图标和运行程序图标设置

    一.标题栏图标 1.*.qrc资源文件中添加图片 2.添加代码 setWindowIcon(QIcon(":/images/paste.png")); //设置窗口上的图标,需要在 ...

  5. QT+qtablewidget自定义表头【合并单元格】

    1.把下列文件放在工程中[已上传到我的文件中] 2.代码 auto *headview = new HHeadViewClass(Qt::Horizontal, ui.tableWidget); he ...

  6. VS2010生成Qt程序图标修改方法

    转自:http://blog.csdn.net/simeone18/article/details/7344547 1.准备ico文件,nuistcard.ico 2.在nuistcard工程目录,建 ...

  7. Qt exe图标

    1.首先准备一张ico照片,也可以通过http://www.ico.la/生成: 2.把ico照片拷贝到项目工程下,比如:“pic.ico” 3.在工程下,创建一个文件“myapp.rc”,用txt打 ...

  8. cornerstone 使用-图标含义-分支-合并

    http://www.jianshu.com/p/7f5c019c528b http://www.cnblogs.com/fyongbetter/p/5404697.html

  9. QT添加程序图标及窗口图标

    程序图标 材料准备 图标文件:*.ico文件,存放在源文件同一目录下,如"myapp.ico" 写入图标 向*.pro文件中,独立一行写入"RC_ICONS = *.ic ...

随机推荐

  1. 如何用HTML5+PhoneGap写个Path项目

    最近Path这个应用很火爆,网上也出现了不少仿Path菜单的项目.即使在原生APP里边,Path的效果也是非常赞的.我突然想,Web APP是不是也能做出类似Path那样的效果呢?于是就有了OPath ...

  2. hdu 1541 Stars(线段树单点更新,区间查询)

    题意:求坐标0到x间的点的个数 思路:线段树,主要是转化,根据题意的输入顺序,保证了等级的升序,可以直接求出和即当前等级的点的个数,然后在把这个点加入即可. 注意:线段树下标从1开始,所以把所有的x加 ...

  3. 成功BOSS的六大秘诀

    1.信念力 一个没有坚定信念的人,是不可能成为伟大企业家的.如果你认为自己行,你就一定行:如果你都认为自己不行了,那你就注定不行.在成功这条道路上,要勇敢地自我肯定和鼓励,这样才能带来巨大的创造力并最 ...

  4. js获取浏览器高度和宽度值,尽量的考虑了多浏览器。

    js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ...

  5. linux_2015_0827_linux中一些常用词的发音and…

    linux相关 Unix: [ ju:niks ] 发音 (yew-nicks) 尤里克斯 GNU [ gəˈnju: ] 发音 (guh-noo) 葛扭 Linux: [ 'li:nэks ] 里那 ...

  6. os和os.path模块

    Os和os.path模块函数 1.      Os模块 函数 描述 文件处理 Mkfifo()/mknod() 创建命名管道/创建文件系统节点 Remove()/unlink() 删除文件 Renam ...

  7. MFC类目录及头文件(转)

    类 描述 头文件 CAnimateCtrl 自动化通用控件 afxcmn.h CArchive afx.h CArchiveException afx.h CArray afxtempl.h CAsy ...

  8. To follow the path

    look to the master,    follow the master,    walk with the master,    see through the master,    bec ...

  9. 输出(test)

    本题要求从输入的N个整数中查找给定的X.如果找到,输出X的位置(从0开始数):如果没有找到,输出“Not Found”. 输入格式: 输入在第1行中给出2个正整数N(<=20)和X,第2行给出N ...

  10. PHPCMS V9实现硬件地址MAC绑定访问技术实现

    目的:会员登录需要 用户名.密码.身份识别码(新增字段) 效果:  解决方法: 目前数据库中macaddress字段已经添加,修改了phpcms\modules\member\index.php 63 ...