1

メインウィンドウでラベルを作成しましたが、そのサイズは200x300pxに設定されています。ボタンをクリックすると、その中の画像を表示する必要があります。これがボタンのスロット機能です。

 void MainWindow::function1(){
QImage img;
img.loadFromData("test.jpg");
img = img.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation);
label->setPixmap(QPixmap::fromImage(img));
}

問題は、これはエラーなしでコンパイルされますが、画像が表示されないことです。ボタンが押されるとQImage::scaled: Image is a null image、IDEにqtの新しいimと表示されます。アドバイスをいただければ幸いです。

ありがとうございました

4

2 に答える 2

2

QImageGUI スレッドの外部で画像を処理する場合は、 を使用する必要があります。また、このloadFromData()関数は、ファイルの名前ではなく、大きなバイト配列を渡すために使用されているようです。

これがQPixmapで行う方法です。

QPixmap pix;

bool loaded = pix.load("test.jpg");

if(loaded == false)
{
    label->setText("Failed to load test.jpg from" + QDir::currentPath());
}
else
{
    pix = pix.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation);
    label->setPixmap(pix);
}

label->width()200 と 300 をとに置き換えることもできますlabel->height()。この方法でピックスマップをスケーリングすると見栄えがよくなりますが、ピックスマップを設定してから使用することもできますlabel->setScaledContents(true)

于 2012-12-14T19:20:57.977 に答える
1

それ以外の

img.loadFromData("test.jpg");

使用する

img.load("test.jpg");

QIODevice からロードしている場合。

于 2012-12-14T19:18:54.157 に答える