Qt4 Comment dessiner à l'intérieur d'un widget?
Qt4, QtCreator
Je suis en train de dessiner à l'intérieur du Widget:
void Widget::on_pushButton_clicked()
{
QPainter painter;
painter.begin(ui->label);
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
painter.drawArc(rectangle, startAngle, spanAngle);
painter.end();
}
Mais lorsque j'appuie sur le bouton rien ne se passe.
Comment faire de ce droit?
OriginalL'auteur Astronavigator | 2010-10-08
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de remplacer paintEvent() et de faire de la peinture. Vous n'avez pas vraiment besoin de la
begin()
etend()
. Déclarer le peintre avecLe constructeur poignée de
begin()
, etend()
sera appelée lorsque lepainter
objet est hors de portée et est détruit.Vous aussi n'avez pas besoin de cliquer sur l'événement pour déclencher la peinture.
paintEvent()
sera appelé à chaque fois que le widget doit dessiner lui-même. Vous pouvez utiliser le bouton cliquer pour passer d'une valeur de type boolean qui lepaintEvent()
vérifications afin de déterminer si elle doit ou non afficher le rectangle et de l'arc. Juste assurez-vous vous appelezupdate()
après vous mettez de la variable.Mise à JOUR:
Pour éviter d'avoir à remplacer le
paintEvent()
d'un widget, vous pouvez utiliser unQLabel
et affecter un pixmap et de la peinture. Remarque: pour autant Que je peux dire, vous aurez besoin de mettre le pixmap chaque fois que vous modifiez.Je n'ai jamais réellement essayé de dessin sur un widget avec le code externe pour le widget, mais QWidget n'héritent PaintDevice il devrait donc être possible.
Gratter que, à partir de la documentation pour QPainter.. "Avertissement: Lorsque l'paintdevice est un widget, QPainter ne peut être utilisé à l'intérieur d'un paintEvent() fonction ou dans une fonction appelée par paintEvent(); c'est moins que l'intervalle Qt::WA_PaintOutsidePaintEvent widget attribut est défini. Sur Mac OS X et Windows, vous pouvez seulement de la peinture dans un paintEvent() fonction indépendamment de cet attribut."
Vous pouvez utiliser un QLabel et QPixmap, dessiner sur le pixmap et de l'attribuer à l'étiquette. J'ai ajouté une mise à jour avec le code ci-dessus.
OriginalL'auteur
Si vous écraser la peinture-méthode décrite par Arnold Spence, vous devriez appeler le parent paintEvent ou vous vous retrouvez avec un widget qui affiche uniquement le rectangle sur fond blanc.
OriginalL'auteur