guia español descargar c++ qt rectangles rounded-corners qpainter

c++ - descargar - qgis español



Qt dibujando un rectángulo redondeado relleno con borde (1)

Quiero dibujar un rectángulo con esquinas redondeadas (el radio del borde es el mismo para las 4 esquinas) con un color específico que llena todo el rectángulo y un color de borde separado (por ejemplo, el borde es de 1 px de ancho).

Desde mi observación, Qt proporciona tres métodos: fillRect y drawRect y drawRoundedRect . Los he probado, no funcionan como quiero. No hay ningún método como fillRoundedRect . Lo que significa que puedo dibujar un rectángulo redondeado pero no se llenará con el color que quiero.

¿Cómo lo hago? Y también, leí que, debido a algunos problemas de aliasing, las esquinas a menudo se representan como desiguales. ¿Cómo lo pongo igual para los cuatro? ¿ painter.setRenderHint(QPainter::Antialiasing) suficiente? ¿O tengo que hacer algo más?


Puede crear una QPainterPath , agregarle el rectángulo redondeado y luego rellenarla y trazarla:

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);

Tenga en cuenta que incluso con el antialiasing, el borde de 1 px probablemente nunca se verá bien, especialmente en un monitor de escritorio con bajo DPI, en un dispositivo móvil con alto DPI será casi invisible.

Si crea el rectángulo como QRectF(9.5, 9.5, 100, 50) se verá mejor con un borde con antialias de 1 px, porque se "ajustará" en el píxel correcto: