code: def paintEvent(self, event):
          
          super(XLineEdit, self).paintEvent(event)
          
          # paint the hint text if not text is set
          if self.text() and not (self.icon() and not self.icon().isNull()):
              return
          
          # paint the hint text
          with XPainter(self) as painter:
              painter.setPen(self.hintColor())
              
              icon = self.icon()
              left, top, right, bottom = self.getTextMargins()
              
              w = self.width()
              h = self.height() - 2
              
              w -= (right + left)
              h -= (bottom + top)
              
              if icon and not icon.isNull():
                  size = icon.actualSize(self.iconSize())
                  x    = self.cornerRadius() + 2
                  y    = (self.height() - size.height()) / 2.0
                  
                  painter.drawPixmap(x, y, icon.pixmap(size.width(), size.height()))
                  
                  w -= size.width() - 2
              else:
                  x = 6 + left
              
              w -= self._buttonWidth
              y = 2 + top
              
              # create the elided hint
              if not self.text() and self.hint():
                  rect    = self.cursorRect()
                  metrics = QFontMetrics(self.font())
                  hint    = metrics.elidedText(self.hint(), Qt.ElideRight, w)
                  align   = self.alignment()
                  
                  if align & Qt.AlignHCenter:
                      x = 0
                  else:
                      x = rect.center().x()
                  
                  painter.drawText(x, y, w, h, align, hint)
docs: Overloads the paint event to paint additional \
          hint information if no text is set on the \
          editor.
          
          :param      event      | <QPaintEvent>