我正在尝试从显示幻灯片的 Qt fluidLauncher 演示中运行稍作修改的代码。代码粘贴在下面。处理paintEvent时,屏幕上会显示一个黑色矩形,因为导入的图像大小为0。
单步执行 Qt creator 中的代码,当前图像路径在监视窗口中为 '"/home/tim/Pictures/HPIM0406.JPG"'。路径正确,包括大小写和 / 分隔符。“幻灯片”变量始终显示 <不可访问>。
在代码中的 slideSize = slide.size() 处,幻灯片大小从 (8481696,0) 变为 (0,0)。看起来虽然没有抛出错误,但 QPixmap slide (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);
}
我晚上大部分时间都在为这个问题苦苦挣扎。谁能建议我可以添加用于调试的其他代码或让我知道此代码可能有什么问题?