Difference between revisions of "Archive:Development/Tutorials/KPixmapCache (zh CN)"

Jump to: navigation, search
m (Text replace - "<code cppqt>" to "<syntaxhighlight lang="cpp-qt">")
Line 7: Line 7:
 
API和QPixmapCache的差不多。
 
API和QPixmapCache的差不多。
 
使用前,先创建一个缓存对象,并起个不重复的名字:
 
使用前,先创建一个缓存对象,并起个不重复的名字:
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
KPixmapCache* cache = new KPixmapCache("myapp-images");
 
KPixmapCache* cache = new KPixmapCache("myapp-images");
 
</code>
 
</code>
Line 13: Line 13:
 
=== 插入并发现位图 ===
 
=== 插入并发现位图 ===
 
然后用insert()或find()方法就可以很容易的获取插入图像了:
 
然后用insert()或find()方法就可以很容易的获取插入图像了:
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
QPixmap pix("file1.png");
 
QPixmap pix("file1.png");
 
cache->insert("file1.png", pix);
 
cache->insert("file1.png", pix);
Line 30: Line 30:
 
=== 简单方法 ===
 
=== 简单方法 ===
 
从文件加载位图并使用缓存是个常用操作,KPixmapCache提供了简洁的方法:
 
从文件加载位图并使用缓存是个常用操作,KPixmapCache提供了简洁的方法:
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
QString filename("myfile.png");
 
QString filename("myfile.png");
 
QPixmap pix = cache->loadFromFile(filename);
 
QPixmap pix = cache->loadFromFile(filename);
Line 37: Line 37:
  
 
对矢量文件,有相同的方法:
 
对矢量文件,有相同的方法:
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
QString filename("myfile.svg");
 
QString filename("myfile.svg");
 
QPixmap pix = cache->loadFromSvg(filename);
 
QPixmap pix = cache->loadFromSvg(filename);
 
</code>
 
</code>
 
这会把矢量文件转化为位图,矢量图的缺省大小就是转化后的大小。如果你要指定一个其它的大小,只要在第二个参数里指定就可以了:
 
这会把矢量文件转化为位图,矢量图的缺省大小就是转化后的大小。如果你要指定一个其它的大小,只要在第二个参数里指定就可以了:
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
QString filename("myfile.svg");
 
QString filename("myfile.svg");
 
QSize size(150, 250);
 
QSize size(150, 250);
Line 53: Line 53:
 
通常,缓存里的内容要确保是最新的。过时的内容就要被更新了。为此,缓存提供了一个timestamp() 时间戳方法。缺省返回缓存创建时间,但你可以通过setTimestamp()方法设置你认为的时间。
 
通常,缓存里的内容要确保是最新的。过时的内容就要被更新了。为此,缓存提供了一个timestamp() 时间戳方法。缺省返回缓存创建时间,但你可以通过setTimestamp()方法设置你认为的时间。
  
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
// 数据
 
// 数据
 
MyDataObject data;
 
MyDataObject data;

Revision as of 20:29, 29 June 2011


Development/Tutorials/KPixmapCache

介绍

KPixmapCache 对QPixmaps提供磁盘缓存。如果你使用矢量图形或从数据产生位图,那么缓存机制可以避免一次又一次从数据中产生同样的位图。

使用

创建缓存对象

API和QPixmapCache的差不多。 使用前,先创建一个缓存对象,并起个不重复的名字: <syntaxhighlight lang="cpp-qt"> KPixmapCache* cache = new KPixmapCache("myapp-images");

插入并发现位图

然后用insert()或find()方法就可以很容易的获取插入图像了: <syntaxhighlight lang="cpp-qt"> QPixmap pix("file1.png"); cache->insert("file1.png", pix);

QPixmap pix2; if (cache->find("file2.png", pix2)) {

   // 从缓存中加载图像

} else {

   // 图像没有在缓存里找到
   // 加载并插入:
   pix2 = QPixmap("file2.png");
   cache->insert("file2.png", pix2);

}

简单方法

从文件加载位图并使用缓存是个常用操作,KPixmapCache提供了简洁的方法: <syntaxhighlight lang="cpp-qt"> QString filename("myfile.png"); QPixmap pix = cache->loadFromFile(filename); 首先检查给定文件是否已经在缓存里了。如果在,从缓存加载;否则从文件加载并加到缓存里面。

对矢量文件,有相同的方法: <syntaxhighlight lang="cpp-qt"> QString filename("myfile.svg"); QPixmap pix = cache->loadFromSvg(filename); 这会把矢量文件转化为位图,矢量图的缺省大小就是转化后的大小。如果你要指定一个其它的大小,只要在第二个参数里指定就可以了: <syntaxhighlight lang="cpp-qt"> QString filename("myfile.svg"); QSize size(150, 250); QPixmap pix = cache->loadFromSvg(filename, size); 这里矢量数据会被转化成位图,大小为150x250象素。


时间戳

通常,缓存里的内容要确保是最新的。过时的内容就要被更新了。为此,缓存提供了一个timestamp() 时间戳方法。缺省返回缓存创建时间,但你可以通过setTimestamp()方法设置你认为的时间。

<syntaxhighlight lang="cpp-qt"> // 数据 MyDataObject data; // 确保缓存足够新 if (cache->timestamp() < data.timestamp()) {

   // 数据比缓存的要新
   // 缓存过时了,撤销,重载
   cache->discard();

} // 缓存内容足够新 QPixmap visualizedData; QString key("data-visualization"); // 试图从缓存里找图像 if (!cache->find(key, visualizedData)) {

   // 图像不在缓存,重新创建...
   visualizedData = createVisualization(data);
   // ...把结果放入缓存里
   cache->insert(key, visualizedData);

} // 给用户展现那副图像。 这个例子展示了如何显示一些数据。如果数据比缓存里的新,那就用discard()方法删除缓存内容。下一步, 检查缓存是否已经有了需要的位图。如果是,就不必在从数据产生了(这事很耗资源的操作)。

应用程序接口(API)文档

要看所有的KPixmapCache方法, 这里有所有的API 文档.


Content is available under Creative Commons License SA 4.0 unless otherwise noted.