2012-09-12 6 views
2

J'essaie d'exécuter du code légèrement modifié à partir de la démo QL fluidLauncher qui montre un diaporama. Le code est collé ci-dessous. Lorsque l'événement paintEvent est traité, un rectangle noir est affiché à l'écran car la taille de l'image importée est 0.Qt Widget Peinture à partir de la démo du diaporama

En passant par le code dans le créateur Qt, currentImagePath est '"/home/tim/Pictures/HPIM0406.JPG" 'dans la fenêtre de la montre. Le chemin est correct, y compris le cas et/diviseurs. La variable 'slide' montre toujours < non accessible >.

Au point du code où slideSize = slide.size() la taille de la diapositive passe de (8481696,0) à (0,0). Il semble que même si aucune erreur n'est levée, la diapositive QPixmap (currentImagePath); ne récupère pas l'image.

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); 

}

J'ai eu du mal avec le problème pour la plupart de la soirée. Quelqu'un peut-il suggérer du code supplémentaire que je pourrais ajouter pour le débogage ou laissez-moi savoir ce qui pourrait ne pas fonctionner avec ce code?

Répondre

0

J'ai une idée pour résoudre votre problème:

  1. vous devez ajouter le fichier de ressources (.qrc) et collez votre image à elle. Utilisez la syntaxe charge pixmap à partir du fichier de ressources. Essayez les diviseurs de pâte comment home/tim/Pictures/HPIM0406.JPG ou /home/tim/Pictures/HPIM0406.JPG ou home\\tim\\Pictures\\HPIM0406.JPG. Une remarque: vous avez écrit '"/home/tim/Pictures/HPIM0406.JPG"', '' - n'utilisez pas de guillemets simples dans le constructeur QPixmap. Je ne comprends pas, vous avez écrit juste ici ou dans votre code.

J'espère que vous aide :)