2

スライドショーを表示する Qt fluidLauncher デモからわずかに変更されたコードを実行しようとしています。コードは下に貼り付けます。インポートされた画像のサイズが 0 であるため、paintEvent が処理されると、黒い四角形が画面に表示されます。

Qt クリエーターでコードを 1 ステップ実行すると、ウォッチ ウィンドウの currentImagePath は '"/home/tim/Pictures/HPIM0406.JPG"' になります。パスはケースと / 仕切りを含めて正しいです。「スライド」変数は常に <アクセス不可> を示します。

コード内の slideSize = slide.size() の時点で、スライド サイズが (8481696,0) から (0,0) に変わります。エラーはスローされませんが、QPixmap スライド (currentImagePath); 画像を取得していません。

void SlideShow::paintEvent(QPaintEvent *event)
{
 QPainter painter(this);
 QString currentImagePath;

 painter.setRenderHint(QPainter::Antialiasing, false);

 if (d->imagePaths.size() > 0) {
    currentImagePath = d->imagePaths[d->currentSlide];
     QPixmap slide( currentImagePath );
     QSize slideSize = slide.size();
     QSize scaledSize = QSize(qMin(slideSize.width(), size().width()),
         qMin(slideSize.height(), size().height()));
     if (slideSize != scaledSize)
         slide = slide.scaled(scaledSize, Qt::KeepAspectRatio);

     QRect pixmapRect(qMax( (size().width() - slide.width())/2, 0),
                      qMax( (size().height() - slide.height())/2, 0),
                      slide.width(),
                      slide.height());

     if (pixmapRect.top() > 0) {
         // Fill in top & bottom rectangles:
         painter.fillRect(0, 0, size().width(), pixmapRect.top(), Qt::black);
         painter.fillRect(0, pixmapRect.bottom(), size().width(), size().height(), Qt::black);
     }

     if (pixmapRect.left() > 0) {
         // Fill in left & right rectangles:
         painter.fillRect(0, 0, pixmapRect.left(), size().height(), Qt::black);
         painter.fillRect(pixmapRect.right(), 0, size().width(), size().height(), Qt::black);
     }

     painter.drawPixmap(pixmapRect, slide);

 } else
     painter.fillRect(event->rect(), Qt::black);

}

私は夜のほとんどの間、この問題に苦しんできました。デバッグ用に追加できる追加のコードを提案したり、このコードの何が問題なのか教えてもらえますか?

4

1 に答える 1

0

あなたの問題を解決するためのアイデアがあります:

  1. リソース ファイル (.qrc) を追加し、画像を貼り付けます。構文を使用すると、リソース ファイルからピックスマップが読み込まれます。

  2. home/tim/Pictures/HPIM0406.JPG区切り線をどのように、またはで貼り付けてみて/home/tim/Pictures/HPIM0406.JPGくださいhome\\tim\\Pictures\\HPIM0406.JPG。コメント: '"/home/tim/Pictures/HPIM0406.JPG"', '' と書きました - QPixmap コンストラクターに一重引用符を使用しないでください。わかりません。ここまたはコードに書き込んだだけです。

お役に立てば幸いです:)

于 2012-10-17T07:30:34.980 に答える