1. ホーム
  2. c++

[解決済み] QIconをQPixmapに変換する方法

2022-02-07 13:22:14

質問

以下のコードがありますが、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) . そこで、明示的にサイズを尋ねることなく、このコードを排除できる代替手段を見つける必要があります。

このコードセグメントから私が理解していること。それはアイコンのサイズを取っている。そこで、私はアイコンの大きさを調べようとしました。しかし、私は再びアイコンのサイズを取得するためのメソッドを見つけることができません。

どうすればいいですか?

QIcon は、サイズの異なる複数の画像を含むことができます。 ジェネリック icon.pixmap() は任意すぎる(どのサイズで構築するかは QPixmap ?). pixmap() メソッド は引き続き使用可能ですが、サイズを指定する必要があります。

サイズがわかっている場合は、そのまま使用することができます。

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());