web-dev-qa-db-ja.com

QIconをQPixmapに変換する方法

次のコードがあり、Qt4コードで変更する必要があります。

_QIcon icon;
QPixmap pixmap = icon.pixmap();    // Qt3 code
_

qt3コードをQt4に置き換えるには、pixmap()をQt4が提供する次のメソッドのいずれかに置き換える必要があります。

_QPixmap QIcon::pixmap ( const QSize & size, Mode mode = Normal, State state = Off ) const  
QPixmap QIcon::pixmap ( int w, int h, Mode mode = Normal, State state = Off ) const
QPixmap QIcon::pixmap ( int extent, Mode mode = Normal, State state = Off ) const
_

このpixmap(void)の呼び出しで使用されているサイズまたは寸法がわからないため、したがって、明示的にサイズを尋ねることなくこのコードを排除できる代替案を見つける必要があります。

このコードセグメントから私が理解していること。アイコンのサイズを取っています。そこで、アイコンのサイズを調べてみます。しかし、アイコンのサイズを取得する方法が見つかりません。

14
Jai

QIconには、サイズの異なる複数の画像が含まれている可能性があります。genericicon.pixmap()は任意です(どのサイズになりますか) QPixmap?)のビルドに使用されます。 pixmap() method は引き続き使用できますが、必要なサイズを指定する必要があります。

サイズがわかっている場合は、次を使用できます。

_QPixmap pixmap = icon.pixmap(requiredImageSize);
_

そうでない場合(あなたの場合のように)、いくつかの選択肢があります。まず、 QIcon::actualSize() メソッドを使用して、指定されたサイズ(またはそれ以下)の画像を要求できます。

_QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(32, 32)));
_

iconに16x16、24x24、64x64が含まれていると、24x24(指定したものよりも小さい最大の画像)が返されます。

2番目の方法は、 QIcon::availableSizes() :を使用して、使用可能な最大の画像(幅と高さが常に等しいと仮定)のクエリサイズを選択することです。

_QList<QSize> sizes = icon.availableSizes();
int maximum = sizes[0].width();
for (int i=1; i < sizes.size(); ++i)
    maximum = qMax(maximum, sizes[i].width());

QPixmap pixmap = icon.pixmap(QSize(maximum, maximum));
_

最初の方法を使用し、十分な大きさの値を指定すると、同じ結果が得られることに注意してください。

_QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(1024, 1024)));
_

もちろん、最初/最後の利用可能なサイズを選択することもできます。

_QPixmap pixmap = icon.pixmap(icon.availableSizes().first());
QPixmap pixmap = icon.pixmap(icon.availableSizes().last());
_
22
Adriano Repetti

QIconリファレンスドキュメント で説明されているいくつかの方法があります。例えば

QPixmap QIcon::pixmap(const QSize & size, Mode mode = Normal, State state = Off)

希望する結果のサイズを指定するだけで済みます。

3
Bowdzone