スライドショーを表示する 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);
}
私は夜のほとんどの間、この問題に苦しんできました。デバッグ用に追加できる追加のコードを提案したり、このコードの何が問題なのか教えてもらえますか?