2016-06-22 9 views
5

मैं अपने PyQt5 एप्लिकेशन में ऐप्पल रेटिना डिस्प्ले के लिए समर्थन जोड़ रहा हूं। जब मैं सफलतापूर्वक उच्च संकल्प माउस रेंडर करने के लिए (मेरे सारे .png फ़ाइलों को @ 2x प्रत्यय जोड़ने और मेरी QApplication में Qt.AA_UseHighDpiPixmaps की स्थापना करके) में कामयाब रहे, मैं एक QGraphicsScene + QGraphicsView में उच्च संकल्प QGraphicsItem प्रतिपादन में कुछ समस्याएं हो रही हैं।ऐप्पल रेटिना डिस्प्ले पर QGraphicsItem प्रतिपादन

अपने आवेदन में, अन्य .png फ़ाइलें लोड से, मैं भी उत्पन्न कई QPixmap मेरी आत्म (उन्हें एक Icon में embedding), प्रतीकों में से पैलेट उपयोगकर्ता आरेख QGraphicsView में प्रदान की गई करने के लिए नए आकार को जोड़ने के लिए उपयोग कर सकते हैं का निर्माण करने की , यानी:

def icon(cls, width, height, **kwargs): 
    """ 
    Returns an icon of this item suitable for the palette. 
    :type width: int 
    :type height: int 
    :rtype: QIcon 
    """ 
    icon = QIcon() 
    for i in (1.0, 2.0): 
     # CREATE THE PIXMAP 
     pixmap = QPixmap(width * i, height * i) 
     pixmap.setDevicePixelRatio(i) 
     pixmap.fill(Qt.transparent) 
     # PAINT THE SHAPE 
     polygon = cls.createPolygon(46, 34) 
     painter = QPainter(pixmap) 
     painter.setRenderHint(QPainter.Antialiasing) 
     painter.setPen(QPen(QColor(0, 0, 0), 1.1, Qt.SolidLine)) 
     painter.setBrush(QColor(252, 252, 252)) 
     painter.translate(width/2, height/2) 
     painter.drawPolygon(polygon) 
     # PAINT THE TEXT INSIDE THE SHAPE 
     painter.setFont(Font('Arial', 11, Font.Light)) 
     painter.drawText(polygon.boundingRect(), Qt.AlignCenter, 'role') 
     painter.end() 
     # ADD THE PIXMAP TO THE ICON 
     icon.addPixmap(pixmap) 
    return icon 

जो मेरे पैलेट (हीरा एक) में प्रतीकों में से एक उत्पन्न करता है।

Eddy Palette

हालांकि जब मैं अपने QGraphicsScene के तत्वों, एक QGraphicsView में दिखाया गया है कि वे कम संकल्प में गाया जाता है जोड़ें:

def paint(self, painter, option, widget=None): 
    """ 
    Paint the node in the diagram. 
    :type painter: QPainter 
    :type option: QStyleOptionGraphicsItem 
    :type widget: QWidget 
    """ 
    painter.setPen(self.pen) 
    painter.setBrush(self.brush) 
    painter.drawPolygon(self.polygon) 

Eddy Diagram

आकार में पाठ सही ढंग से प्रदान की गई है, और मैं इसे खुद चित्रित नहीं कर रहा हूं क्योंकि यह QGraphicsTextItem है जिसमें मेरा QGraphicsItem माता-पिता के रूप में है।

समस्या यह है कि QPixmap के लिए मैं QGraphicsItem के लिए डिवाइस पिक्सेल अनुपात सेट कर सकता हूं। क्या मैं कुछ भूल रहा हूँ?

मैं क्यूटी 5.5.1 और एसआईपी 4.18 के खिलाफ निर्मित पीईक्यूटी 5.5.1 का उपयोग कर रहा हूं (5.6 का उपयोग नहीं कर रहा क्योंकि मुझे एप्लिकेशन स्टार्टअप पर कई क्रैश का सामना करना पड़ रहा है जिसे मैंने पहले ही पीईक्यूटी देवों को बताया है)।

उत्तर

0

शायद आप जो सुनना नहीं चाहते थे, लेकिन Qt added retina support in 5.6

+0

मुझे लगता है कि मुझे ब्लॉग पोस्ट याद आया, भले ही मैं क्यूटी 5.5/5.6 में उच्च डीपीआई समर्थन के बारे में खबर ढूंढ रहा हूं। मुझे लगता है कि मुझे सिर्फ पीईक्यूटी 5.6 में एक फिक्स के लिए इंतजार करना है। –

+0

भले ही आपका उत्तर मेरी समस्या का समाधान नहीं करता है (चूंकि यह क्यूटी के नवीनतम संस्करण में अपग्रेड किए बिना स्पष्ट रूप से हल करने योग्य नहीं है) मैं आपको प्रयास के लिए बक्षीस दूंगा। –

-1

मैं पीईक्यूटी 5.7 में इसी तरह के मुद्दे से भी संघर्ष कर रहा हूं।

आप QGraphicsItem के अपने उप वर्ग लिख रहे हैं, तो विधि paint() में antialias के संकेत प्रस्तुत करना सेट करने का प्रयास:

def paint(self, painter, option, widget=None): 
    """ 
    Paint the node in the diagram. 
    :type painter: QPainter 
    :type option: QStyleOptionGraphicsItem 
    :type widget: QWidget 
    """ 
    painter.setPen(self.pen) 
    painter.setBrush(self.brush) 
    painter.setRenderHint(QPainter.Antialiasing) # <-- add this line 
    painter.drawPolygon(self.polygon) 

ध्यान दें, यह सबसे अच्छा या सही उत्तर नहीं हो सकता।

संबंधित मुद्दे