2013-03-08 9 views
5

içinde yuvarlatılmış 2 köşesi yuvarlatılıyor Painter kullanarak Pixmap için rengi doldurmam gereken bir uygulama üzerinde çalışıyorum. Pixmap (alt kenar) 2 yuvarlak köşeli tipte bir dikdörtgen biçimindedir. En üst 2 köşe düz/normaldir.Çizim Dikdörtgeni Qt

Qt'nin drawRoundedRect() API'sini kullanmayı denedim, ancak dikdörtgenin tüm köşelerini yuvarlatır. Dikdörtgeni sadece 2 köşeli yuvarlak ve diğer iki daireyle çizmem gerekiyor.

Durumla karşılaşan biri varsa, lütfen bana çözümü öner.

Teşekkür

+0

Yanıtlardan herhangi birini buldunuz mu? – darkgaze

cevap

14

Bunun için QPainterPath kullanabilirsiniz:

QPainterPath path; 
    path.setFillRule(Qt::WindingFill); 
    path.addRoundedRect(QRect(50,50, 200, 100), 20, 20); 
    path.addRect(QRect(200, 50, 50, 50)); // Top right corner not rounded 
    path.addRect(QRect(50, 100, 50, 50)); // Bottom left corner not rounded 
    painter.drawPath(path.simplified()); // Only Top left & bottom right corner rounded 
+0

Cevabınız için çok teşekkür ederim. İyi çalışıyor. – user2111197

+0

bana da yardımcı oluyor, teşekkürler! – netawater

+1

@ user2111197 Sorunu çözdüyse, kabul edilen yanıt olarak işaretlemelisiniz. –

3

Sen (çalışmak veya dosya QSS yüklenmesi üzerine) stil kullanabilirsiniz. Çok kolayca bunu başardıkları için:

QString str = "bottom-right-radius: 10px; top-right-radius: 0px...."; 
box->setStylesheet(str); 

Ben kutu

VEYA

nesne adını ayarlayın (etiketlemeyi> setPixmap (...)) bir QLabel içinde bir Pixmap olduğunu varsayalım yüklediğiniz bir stil sayfası olarak

: o zaman bir şey (etikete) ve karşı

QLabel # adını {10px ... sağ alt-yarıçap} kullanabilirsiniz.

Bu siteye göz atın. Romha Korev'in yanıtını uzatmak için: http://border-radius.com/

0

. Burada sadece yuvarlak köşeleri olan bir kutu örneği (sol üst, sağ üst). Köşelerdeki dikdörtgenler ana dikdörtgene göre hesaplanır!

qreal left = 5; 
qreal top = 10; 
qreal width = 100; 
qreal height = 20; 
QRectF rect(left, top, width, height); 

QPainterPath path; 
path.setFillRule(Qt::WindingFill); 
path.addRoundedRect(rect, 5, 5); 
qreal squareSize = height/2; 
path.addRect(QRect(left, top+height-squareSize, squareSize, squareSize)); // Bottom left 
path.addRect(QRect((left+width)-squareSize, top+height-squareSize, squareSize, squareSize)); // Bottom right 
painter->drawPath(path.simplified()); // Draw box (only rounded at top)