web-dev-qa-db-fra.com

Qt dessiner un rectangle arrondi rempli avec bordure

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?

20
SexyBeast

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.

enter image description here

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:

enter image description here

48
dtech