2

我正在尝试从显示幻灯片的 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);

}

我晚上大部分时间都在为这个问题苦苦挣扎。谁能建议我可以添加用于调试的其他代码或让我知道此代码可能有什么问题?

4

1 回答 1

0

我有一些解决您问题的想法:

  1. 您应该添加资源文件 (.qrc) 并将图像粘贴到其中。使用语法从资源文件加载像素图。

  2. 尝试粘贴分隔线的方式home/tim/Pictures/HPIM0406.JPG/home/tim/Pictures/HPIM0406.JPGhome\\tim\\Pictures\\HPIM0406.JPG。一些评论:你写了 '"/home/tim/Pictures/HPIM0406.JPG"', '' - 在 QPixmap 构造函数中不使用单引号。我不明白,你只是在这里或你的代码中写的。

我希望它可以帮助你:)

于 2012-10-17T07:30:34.980 回答