我正在尝试从显示幻灯片的Qt fluidLauncher演示中运行稍微修改过的代码。代码粘贴在下面。处理paintEvent时,屏幕上会显示黑色矩形,因为导入的图像大小为0。
单步执行Qt创建器中的代码,currentImagePath在观察窗口中为“/home/tim/Pictures/HPIM0406.JPG”。路径是正确的,包括case和/ dividers。 'slide'变量始终显示< not accessible>。
在代码中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);
}
我在晚上的大部分时间里一直在努力解决这个问题。任何人都可以建议我可以添加的其他代码用于调试或让我知道这段代码可能有什么问题吗?
答案 0 :(得分:0)
我有点想解决你的问题:
您应该添加资源文件(.qrc)并将图像粘贴到其中。使用语法从资源文件加载pixmap。
尝试粘贴分隔符home/tim/Pictures/HPIM0406.JPG
或/home/tim/Pictures/HPIM0406.JPG
或home\\tim\\Pictures\\HPIM0406.JPG
。一些评论:你写了'“/home/tim/Pictures/HPIM0406.JPG”','' - 不要在QPixmap构造函数中使用单引号。我不明白,你在这里或你的代码中写道。
我希望它可以帮助你:)