Je veux dessiner un rectangle avec des coins arrondis (rayon de bordure identique pour les 4 coins) avec une couleur spécifique remplissant tout le rectangle et une couleur de bordure distincte (disons que la bordure mesure 1 px de large).
D'après mon observation, Qt fournit trois méthodes - fillRect
et drawRect
et drawRoundedRect
. Je les ai essayés, ils ne fonctionnent pas comme je le veux. Il n'y a pas de méthode comme fillRoundedRect
. Ce qui signifie que je peux dessiner un rectangle arrondi mais il ne sera pas rempli de la couleur que je veux.
Comment fait-on ça? Et aussi, j'ai lu qu'en raison de certains problèmes d'alias, les coins étaient souvent rendus inégaux. Comment puis-je le définir comme égal pour les quatre? Painter.setRenderHint(QPainter::Antialiasing)
suffira-t-il? Ou dois-je faire autre chose?
Vous pouvez créer un QPainterPath
, y ajouter le rect arrondi, puis le remplir et le caresser:
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
QPainterPath path;
path.addRoundedRect(QRectF(10, 10, 100, 50), 10, 10);
QPen pen(Qt::black, 10);
p.setPen(pen);
p.fillPath(path, Qt::red);
p.drawPath(path);
Notez que même avec l'anticrénelage, une bordure de 1 px ne sera probablement jamais vraiment belle, en particulier sur un moniteur de bureau à faible DPI, sur un appareil mobile à DPI élevé, elle sera presque invisible.
Si vous créez le rectangle en tant que QRectF(9.5, 9.5, 100, 50)
, il aura une meilleure apparence avec une bordure anticrénelée de 1 px, car il "s'accroche" au pixel droit: