分享

在Qt里使用一个图片文件存储多个icon图标(附源码)

 guitarhua 2011-12-13

 

在Qt里使用一个图片文件存储多个icon图标(附源码)

因为icon图像一般都很小,大部分16×16的或者32×32的,在存储成文件的时候反而文件头占的空间比图像的内容要多,所以一般都会选择将多个图标合成到一个文件里,然后在应用里读取对应的图标。下面是一个由多个16×16的图标组合出来的图片
icons

要在Qt中读取相应的图标,有一个很简单的函数可以实现该功能
QPixmap QPixmap::copy ( int x, int y, int width, int height ) const
只要设置好坐标和大小就能很方便的取得子图像,比如copy(0,0,16,16)可以取得上面的左边第一个图标,copy(16,0,16,16)取得第二个图标。我写了一个简单的程序去演示这个功能,用不同的图标设置不同按钮的背景
screenshot-icons

//main.cpp
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPixmap>

int main(int argc,char *argv[]){ QApplication app(argc,argv); QWidget *ww=new QWidget(); QHBoxLayout *hlayout1=new QHBoxLayout(); QHBoxLayout *hlayout2=new QHBoxLayout(); QPushButton *bb; QPixmap pic("icons.png"); for(int i=0;i<7;i++){ bb=new QPushButton();bb->setIcon(pic.copy(i*32,0,16,16)); hlayout1->addWidget(bb); bb=new QPushButton();bb->setIcon(pic.copy(i*32+16,0,16,16)); hlayout2->addWidget(bb); } QVBoxLayout *layout=new QVBoxLayout(); layout->addLayout(hlayout1); layout->addLayout(hlayout2); ww->setLayout(layout); ww->show(); return app.exec(); }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多