[英]Qt Widget Painting from slideshow demo
我试图从显示幻灯片的Qt fluidLauncher演示中运行经过稍微修改的代码。 该代码粘贴在下面。 处理paintEvent时,屏幕上会显示一个黑色矩形,因为导入的图像大小为0。
单步浏览Qt创建器中的代码,在监视窗口中,currentImagePath是'“ /home/tim/Pictures/HPIM0406.JPG”'。 路径是正确的,包括大小写和/分隔符。 'slide'变量始终显示<notaccess>。
在代码中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);
}
整个晚上,我都为这个问题苦苦挣扎。 谁能建议我可以添加用于调试的其他代码,或者让我知道此代码可能有什么问题?
我有一些解决您的问题的想法:
您应该添加资源文件(.qrc)并将图像粘贴到该文件。 使用语法从资源文件加载像素图。
尝试粘贴分隔线, home/tim/Pictures/HPIM0406.JPG
或/home/tim/Pictures/HPIM0406.JPG
或home\\\\tim\\\\Pictures\\\\HPIM0406.JPG
。 一些说明:您写了'“ /home/tim/Pictures/HPIM0406.JPG”',''-在QPixmap构造函数中不要使用单引号。 我不明白,您是在此处或在代码中编写的。
希望对您有所帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.