Add method for checking of QPixmapCache::Key validity

We need a method to check whether a specified pixmap is still
cached without touching the recently-accessed list for this pixmap.

[ChangeLog][QtGui][QPixmapCache] Added QPixmapCache::Key::isValid().

Change-Id: I90fa4f67b569099b67b6207e78494beb3111b68e
Reviewed-by: aavit <eirik.aavitsland@theqtcompany.com>
This commit is contained in:
Serge Lysenko 2015-08-21 19:58:49 +03:00
parent 0d3464428e
commit 8f68d15789
3 changed files with 17 additions and 6 deletions

View File

@ -155,6 +155,16 @@ bool QPixmapCache::Key::operator ==(const Key &key) const
\since 5.6 \since 5.6
*/ */
/*!
Returns \c true if there is a cached pixmap associated with this key.
Otherwise, if pixmap was flushed, the key is no longer valid.
\since 5.7
*/
bool QPixmapCache::Key::isValid() const Q_DECL_NOTHROW
{
return d && d->isValid;
}
/*! /*!
\internal \internal
*/ */

View File

@ -59,6 +59,7 @@ public:
Key &operator =(const Key &other); Key &operator =(const Key &other);
void swap(Key &other) Q_DECL_NOTHROW { qSwap(d, other.d); } void swap(Key &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
bool isValid() const Q_DECL_NOTHROW;
private: private:
KeyData *d; KeyData *d;

View File

@ -147,7 +147,7 @@ void tst_QPixmapCache::setCacheLimit()
QVERIFY(QPixmapCache::find(key, p1) == 0); QVERIFY(QPixmapCache::find(key, p1) == 0);
QPixmapCache::setCacheLimit(1000); QPixmapCache::setCacheLimit(1000);
key = QPixmapCache::insert(*p1); key = QPixmapCache::insert(*p1);
QCOMPARE(getPrivate(key)->isValid, true); QVERIFY(key.isValid());
QCOMPARE(getPrivate(key)->key, 1); QCOMPARE(getPrivate(key)->key, 1);
delete p1; delete p1;
@ -189,7 +189,7 @@ void tst_QPixmapCache::setCacheLimit()
key2 = QPixmapCache::insert(*p1); key2 = QPixmapCache::insert(*p1);
QCOMPARE(getPrivate(key2)->key, 1); QCOMPARE(getPrivate(key2)->key, 1);
//This old key is not valid anymore after the flush //This old key is not valid anymore after the flush
QCOMPARE(getPrivate(key)->isValid, false); QVERIFY(!key.isValid());
QVERIFY(QPixmapCache::find(key, &p2) == 0); QVERIFY(QPixmapCache::find(key, &p2) == 0);
delete p1; delete p1;
} }
@ -233,7 +233,7 @@ void tst_QPixmapCache::find()
//at that time the first key has been erase because no more place in the cache //at that time the first key has been erase because no more place in the cache
QVERIFY(QPixmapCache::find(key, &p1) == 0); QVERIFY(QPixmapCache::find(key, &p1) == 0);
QCOMPARE(getPrivate(key)->isValid, false); QVERIFY(!key.isValid());
} }
void tst_QPixmapCache::insert() void tst_QPixmapCache::insert()
@ -313,7 +313,7 @@ void tst_QPixmapCache::replace()
p2.fill(Qt::yellow); p2.fill(Qt::yellow);
QPixmapCache::Key key = QPixmapCache::insert(p1); QPixmapCache::Key key = QPixmapCache::insert(p1);
QCOMPARE(getPrivate(key)->isValid, true); QVERIFY(key.isValid());
QPixmap p3; QPixmap p3;
QVERIFY(QPixmapCache::find(key, &p3) == 1); QVERIFY(QPixmapCache::find(key, &p3) == 1);
@ -321,7 +321,7 @@ void tst_QPixmapCache::replace()
QPixmapCache::replace(key, p2); QPixmapCache::replace(key, p2);
QVERIFY(QPixmapCache::find(key, &p3) == 1); QVERIFY(QPixmapCache::find(key, &p3) == 1);
QCOMPARE(getPrivate(key)->isValid, true); QVERIFY(key.isValid());
QCOMPARE(getPrivate(key)->key, 1); QCOMPARE(getPrivate(key)->key, 1);
QCOMPARE(p3.width(), 10); QCOMPARE(p3.width(), 10);
@ -438,7 +438,7 @@ void tst_QPixmapCache::clear()
for (int k = 0; k < numberOfKeys; ++k) { for (int k = 0; k < numberOfKeys; ++k) {
QVERIFY(QPixmapCache::find(keys.at(k), &p1) == 0); QVERIFY(QPixmapCache::find(keys.at(k), &p1) == 0);
QCOMPARE(getPrivate(keys[k])->isValid, false); QVERIFY(!keys[k].isValid());
} }
} }