5

アプリに画像を表示したい。QtDesignerを使用してUIを設計し、次にpyqtを使用してコーディングします。問題は、表示される画像がUIのウィジェットサイズよりも大きいことです。私は公式のデモを参照します:QT- ウィジェット画像ビューアのデモ

imagelabelとscrollAreaを追加し、次のようにコーディングします。

---- UI init ----
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(40, 140, 361, 511))
self.label.setSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred)
self.label.setObjectName(_fromUtf8("label"))
self.scrollArea = QtGui.QScrollArea(self.centralwidget)
self.scrollArea.setGeometry(QtCore.QRect(40, 140, 361, 511))
self.scrollArea.setWidget(self.label)
self.scrollArea.setObjectName(_fromUtf8("scrollArea"))

---- function ----
filename = "./Penguins.jpg"
image = QtGui.QImage(filename)
pp = QtGui.QPixmap.fromImage(image)
lbl = QtGui.QLabel(self.label)
lbl.setPixmap(pp)
self.scrollArea.setWidgetResizable(True)
lbl.show()

ただし、スクロールバーが表示されなくても、画像は引き伸ばされません。

4

3 に答える 3

16

に電話する必要がありますself.label.setScaledContents(true);。そのQLabelため、ピックスマップ/画像のサイズに合わせてサイズが変更され、スクロールバーが表示されます。このドキュメントを参照してください。

于 2012-06-06T13:36:44.837 に答える
4

QLabel::setScaledContents のデフォルトの実装は、画像がラベルの最大サイズよりも大きい場合に縦横比を維持できなかったため、機能しませんでした。

この小さなヘルパーは、必要に応じてラベルの最大サイズに収まるように画像を縮小し (拡大はしません)、常に縦横比を維持します。

/**
 * Fill a QLabel widget with an image file, respecting the widget's maximum sizes,
 * while scaling the image down if needed (but not up), and keeping the aspect ratio
 * Returns false if image loading failed
 ****************************************************************************/
static bool SetLabelImage(QLabel *label, QString imageFileName)
{
    QPixmap pixmap(imageFileName);
    if (pixmap.isNull()) return false;

    int w = std::min(pixmap.width(),  label->maximumWidth());
    int h = std::min(pixmap.height(), label->maximumHeight());
    pixmap = pixmap.scaled(QSize(w, h), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    label->setPixmap(pixmap);
    return true;
}
于 2012-08-03T21:07:58.057 に答える
0

私は PyQt を使用しませんが、QtPixmap コントロールには scaled() 関数があります。ラベルに入れる前に画像のサイズを変更できます。

  • スケーリングされた()
  • scaledToHeight()
  • scaledToWidth()

これは、画像のサイズを QLabel サイズに変更するために C++ で使用するサンプル コードです。

imatge.load("sprite.png");
QPixmap imatge2 = imatge.scaled(ui->label->width(),ui->label->height());
于 2012-06-06T13:44:25.293 に答える