आपको paintEvent() ओवरराइड करने की आवश्यकता है और वहां अपनी पेंटिंग करें। आपको वास्तव में begin()
और end()
की आवश्यकता नहीं है।
QPainter painter(this);
साथ चित्रकार घोषित निर्माता begin()
संभाल लेंगे, और जब painter
वस्तु क्षेत्र से बाहर चला जाता है और नष्ट हो जाता है end()
बुलाया जाएगा।
आपको चित्रकला को ट्रिगर करने के लिए क्लिक ईवेंट की भी आवश्यकता नहीं होगी। जब भी विजेट को खुद को आकर्षित करने की आवश्यकता होती है तो paintEvent()
कॉल किया जाएगा। आप एक बूलियन टॉगल करने के लिए बटन क्लिक कर सकते हैं कि paintEvent()
यह निर्धारित करने के लिए जांच करता है कि यह आयताकार और चाप प्रदर्शित करना चाहिए या नहीं। चर को टॉगल करने के बाद बस सुनिश्चित करें कि आप update()
पर कॉल करें।
void Widget::on_pushButton_clicked()
{
drawShapes = !drawShapes;
update();
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
if(drawShapes)
{
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
painter.drawArc(rectangle, startAngle, spanAngle);
}
}
अद्यतन:
ओवरराइड करने के लिए एक विजेट के paintEvent()
, आप एक QLabel
उपयोग करें और यह करने के लिए एक पिक्समैप आवंटित और उस को पेंट कर सकते से बचने के लिए। नोट: जहां तक मैं कह सकता हूं, आपको प्रत्येक बार इसे संशोधित करने पर पिक्समैप सेट करने की आवश्यकता होगी।
void MainForm::slot_buttonClick()
{
QPixmap pixmap(100,100);
pixmap.fill(QColor("transparent"));
QPainter painter(&pixmap);
painter.setBrush(QBrush(Qt::black));
painter.drawRect(10, 10, 100, 100);
label.setPixmap(pixmap);
}
स्रोत
2010-10-08 23:37:27
क्या ओवरराइड किए बिना पेंट करने का कोई तरीका है? या क्या कोई ऐसा घटक है जिस पर मैं किसी भी घटना के बिना आकर्षित कर सकता हूं, जैसे टीआईमेज या टीएफओआर या वीसीएल (डेल्फी) में टीसीएनवास युक्त कोई अन्य घटक? (डेल्फी में केवल फॉर्म 1 लिख सकता है। कन्वस। सर्कल (...) जब भी मुझे इसकी ज़रूरत होती है, न केवल ऑनपेंट इवेंट के अंदर) – Astronavigator
मैंने वास्तव में विजेट के बाहर कोड के साथ एक विजेट पर ड्राइंग करने की कोशिश नहीं की है, लेकिन क्यूविजेट पेंटडेविस का उत्तराधिकारी है यह संभव होना चाहिए। –
स्क्रैच कि, QPainter के लिये दस्तावेज से .. "चेतावनी: जब paintdevice एक विजेट है, QPainter केवल एक paintEvent() फ़ंक्शन के अंदर या एक समारोह paintEvent() द्वारा कहा जाता है में इस्तेमाल किया जा सकता है, वह यह है कि जब तक क्यूटी :: WA_PaintOutsidePaintEvent विजेट विशेषता सेट है। मैक ओएस एक्स और विंडोज़ पर, आप केवल इस विशेषता की सेटिंग के बावजूद पेंटएवेंट() फ़ंक्शन में पेंट कर सकते हैं। " –