2013-03-08 5 views
5

में गोलाकार केवल 2 कोनों के साथ ड्राइंग आयताकार मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूं जहां मुझे पेंटर का उपयोग करके पिक्समैप के लिए रंग भरना होगा। पिक्समैप टाइप आयताकार (नीचे किनारे) 2 गोलाकार कोनों के साथ है। शीर्ष 2 कोनों फ्लैट/सामान्य हैं।क्यूटी

मैंने क्यूटी के drawRoundedRect() API का उपयोग करने की कोशिश की, लेकिन यह आयताकार के सभी कोनों को गोलाकार बनाता है। मुझे आयताकार को केवल 2 कोनों के गोलाकार और अन्य दो फ्लैटों के साथ खींचने की जरूरत है।

यदि कोई स्थिति में आता है, तो कृपया मुझे समाधान का सुझाव दें।

धन्यवाद

+0

क्या आपको कोई जवाब सही मिला? – darkgaze

उत्तर

14

आप उस के लिए QPainterPath उपयोग कर सकते हैं:

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

उत्तर के लिए बहुत बहुत धन्यवाद। यह बढ़िया काम करता है। – user2111197

+0

यह मेरी मदद भी करता है, धन्यवाद! – netawater

+1

@ user2111197 अगर आपको अपनी समस्या हल हो जाती है तो आपको इसे स्वीकृत उत्तर के रूप में चिह्नित करना चाहिए –

3

आप (क्रम या फ़ाइल QSS लोड हो रहा है पर) स्टाइलशीट का उपयोग कर सकते हैं। आप बहुत आसानी से यह करने के लिए प्रबंधन कर सकते हैं:

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

मुझे लगता है कि बॉक्स में एक QLabel अंदर एक पिक्समैप (label-> setPixmap (...))

या

वस्तु का नाम सेट है कुछ (लेबल), और उसके बाद के लिए

QLabel # नाम {से नीचे-दाएं त्रिज्या: 10px ...} का उपयोग

एक स्टाइलशीट आप लोड में।

इस साइट को चेक आउट करें। यह मदद करता है: http://border-radius.com/

0

रोहा कोरेव का उत्तर बढ़ाने के लिए। यहां केवल एक गोलाकार शीर्ष कोनों के साथ एक बॉक्स का एक उदाहरण (शीर्ष बाएं, ऊपर दाएं)। कोनों में आयतों की गणना मुख्य आयत के आधार पर की जाती है!

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)