2010-12-07 44 views
1

J'essaie de dessiner des formes sur un VideoWidget à partir de la bibliothèque Phonon, mais je ne peux pas remplacer la méthode paintEvent().Impossible de remplacer VideoWidget paintEvent() dans QT C++

Si je tente de mettre en œuvre la méthode comme ceci:

void Phonon::VideoWidget::paintEvent(QPaintEvent *event){ 
    QPainter painter(this); 
    painter.setPen(QPen(Qt::red,3)); 
    qDebug()<< "repintando"; 
    painter.drawEllipse(500,500,100,100); 
} 

Je reçois cette erreur: non 'Phonon vide :: VideoWidget :: paintEvent (QPaintEvent *)' fonction membre déclaré dans la classe « Phonon :: VideoWidget »

donc j'ai décidé de créer un en-tête de myVideoWidget avec la méthode protégée paintEvent et mis en œuvre dans mainwindow.cpp comme ceci:

void myVideoWidget::paintEvent(QPaintEvent *event){ 
    QPainter painter(this); 
    painter.setPen(QPen(Qt::red,3)); 
    qDebug()<< "repintando"; 
    painter.drawEllipse(500,500,100,100); 
} 

et le pr ogram s'exécute mais ne dessine rien ou affiche le message "repintando".

Quelqu'un peut-il m'aider? Qu'est-ce que je fais mal?

Merci beaucoup!

+0

Voyez-vous quelque chose lorsque vous redimensionnez ou modifiez l'état du widget (minimiser/maximiser)? Essayez d'appeler la méthode update() de votre classe myVideoWidget. Est-ce que ça fait quelque chose? –

+0

J'ai essayé ce que vous dites mais je ne vois rien et ne peux pas non plus voir le message que j'envoie à qDebug(), cela signifie que la méthode n'est pas en cours d'exécution. Merci la même chose! – nico

Répondre

1

Comme je l'ai compris, vous avez livré votre propre classe, qui hérite de Phonon :: VideoWidget et vous le définissez comme votre widget vidéo pour votre lecteur? Si oui, que vous devez modifier votre paintEvent à quelque chose comme ceci:

void myVideoWidget::paintEvent(QPaintEvent *event){ 
    Phonon::VideoWidget::paintEvent(event); // perform paint event from inherited class 
    QPainter painter(this); 
    painter.setPen(QPen(Qt::red,3)); 
    qDebug()<< "repintando"; 
    painter.drawEllipse(500,500,100,100); 
} 

MAIS! Je ne suis pas sûr si VideoWidget utilise paintEvent pour rendre les images vidéo. Il est possible que vous deviez appeler votre manuel paintEvent. Essayez d'utiliser repaint au lieu de mettre à jour peut-être.

+0

Je pense que c'est une bonne idée, mais ça ne marche pas. Ce serait utile si je pouvais seulement voir l'ellipse et pas la vidéo. Le problème est que je ne contourne pas bien la méthode. Il y a quelque chose que je fais de mal qui fait que paintEvent n'est pas exécuté, mais je ne sais pas quoi. Peut-être que les paramètres ne sont pas corrects, donc la signature ne correspond pas à celle de VideoWidget mais je l'ai déjà vérifiée. Merci la même! – nico

+0

J'ai le même problème, avez-vous résolu cela? merci ... – fredcrs

+0

Eh bien comme je l'ai dit VideoWidget ne peut pas utiliser paintEvent pour rendre n'importe quoi. Vous pouvez ajouter un widget translucide sur VideoWidget et peindre sur ce widget à la place –