Quelles sont les étapes nécessaires pour activer l'anticrénelage lors de l'utilisation d'un QPainter sur un QGLWidget?
Je suis en train de dessiner des formes de base sur un QGLWidget. Je suis en train d'activer l'antialiasing pour lisser les lignes, mais ça ne fonctionne pas.
C'est ce que je suis en train en ce moment:
QGLWidget *widget = ui->renderWidget;
QPainter painter;
widget->makeCurrent();
glEnable(GL_MULTISAMPLE);
glEnable(GL_LINE_SMOOTH);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.begin(widget);
Cependant, rien dessinés avec ce peintre a encore des bords irréguliers. De quoi dois-je faire?
Est-ce que votre système de support multi-échantillons tampons d'images?
Oui, c'est windows 7, et j'ai eu à le faire fonctionner sur un autre Qt projet utilisé QGLWidget sans un QPainter, simplement en permettant GL_MULTISAMPLE.
Le fait que c'est Windows 7 n'est pas pertinent, c'est de savoir si ou non de votre GPU et de la prise en charge des pilotes eux - mais si un autre projet sur la même machine a fonctionné correctement, alors il doit être OK. Votre exemple semble indiquer que vous êtes en train de dessiner sur le widget à l'extérieur d'un
Oui, c'est windows 7, et j'ai eu à le faire fonctionner sur un autre Qt projet utilisé QGLWidget sans un QPainter, simplement en permettant GL_MULTISAMPLE.
Le fait que c'est Windows 7 n'est pas pertinent, c'est de savoir si ou non de votre GPU et de la prise en charge des pilotes eux - mais si un autre projet sur la même machine a fonctionné correctement, alors il doit être OK. Votre exemple semble indiquer que vous êtes en train de dessiner sur le widget à l'extérieur d'un
paintEvent(QPaintEvent* event)
, ou est-ce juste confus pseudo-code!?OriginalL'auteur Elliott | 2012-06-10
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la solution. Lors du débogage d'un autre problème, j'ai trouvé des messages dans ma sortie de débogage à l'effet que vous ne pouvez pas définir de renderhints avant l'appel à begin().
Les ouvrages suivants:
OriginalL'auteur Elliott
Vous pouvez essayer d'activer l'antialiasing sur le Widget :
Fonctionne parfaitement. Remarque, vous avez encore besoin de
setRenderHint(QPainter::Antialiasing)
.OriginalL'auteur Marc Plano-Lesay
Cette question est assez vieux mais j'ai toujours trouvé ça sur Google. Vous ne devriez pas utiliser
QGLWidget
plus. Utiliser la plus récenteQOpenGLWidget
. Cela rend la scène hors de l'écran plutôt que de créer un natif fenêtre OpenGL qui provoque toutes sortes de problèmes avec le redimensionnement des mises en page. Ce code fonctionne pour moi. Mettre dans votreQGraphicsView
constructeur:OriginalL'auteur Timmmm