1. ホーム
  2. c++

[解決済み] Qt: QPixmap を含む QLabel のアスペクト比を維持したままサイズを変更する

2023-04-30 05:21:50

質問

私は、より大きく、動的に変化するQPixmapの内容をユーザに表示するために、QLabelを使用しています。このラベルを、利用可能なスペースに応じて小さくしたり大きくしたりすることができればいいのですが。画面サイズは常にQPixmapと同じ大きさではありません。

をどのように変更すればよいのでしょうか。 QSizePolicysizeHint() で、元のQPixmapの縦横比を維持したままQPixmapのサイズを変更できますか?

を変更することができません。 sizeHint() を設定することで、QLabelの minimumSize() をゼロに設定しても効果はない。設定する hasScaledContents() を設定することで、QLabelを成長させることができますが、アスペクト比を壊してしまいます...。

QLabelをサブクラス化することは助けになりましたが、この解決策は単純な問題に対してあまりにも多くのコードを追加してしまいます...。

どのようなスマートなヒントでも、これを達成するために を使用せずに をサブクラス化することなく達成するためのスマートなヒントがあれば教えてください。

どのように解決するのですか?

ラベルのサイズを変更するには、拡大や最小化など、ラベルのサイズに関する適切なポリシーを選択します。

pixmapの縦横比が変わるたびに、その縦横比を維持したまま拡大縮小することができます。

QPixmap p; // load pixmap
// get label dimensions
int w = label->width();
int h = label->height();

// set a scaled pixmap to a w x h window keeping its aspect ratio 
label->setPixmap(p.scaled(w,h,Qt::KeepAspectRatio));

このコードを追加する箇所は2箇所あります。

  • pixmapが更新されたとき
  • において resizeEvent を含むウィジェットの