2017-11-27 4 views
1

Ich habe QDockWidget unterklassifiziert und setze den Titelbalken Text über myDockWidget.setWindowTitle("Some text"). Ich würde jedoch gerne einen anderen Text auf der Registerkarte anzeigen, wenn das Widget angedockt ist. Mit anderen Worten, wenn das Widget dockt ist, würde Ich mag eine Saite in der Titelleiste und eine andere Zeichenfolge in der Registerkarte anzuzeigen:Wie wird ein anderer Text für die Registerkarte und den Fenstertitel eines QDockWidgets festgelegt?

enter image description here

Ist dies möglich, und wenn ja, wie kann es getan werden?

+0

Sie könnten mit einem Bild angeben, was Sie erhalten möchten. – eyllanesc

+0

Bild zur Veranschaulichung hinzugefügt. – LKeene

Antwort

1

Dies kann erreicht werden, indem die paintEvent erneut implementiert und der Standardtext der Titelleiste überschrieben wird. Das Fenster-Titel muss noch die Registerkarte-Text eingestellt werden:

class DockWidget(QtGui.QDockWidget): 
    _title_text = None 

    def titleText(self): 
     if self._title_text is None: 
      return self.windowTitle() 
     return self._title_text 

    def setTitleText(self, text): 
     self._title_text = text 
     self.repaint() 

    def paintEvent(self, event): 
     painter = QtGui.QStylePainter(self) 
     if self.isFloating(): 
      options = QtGui.QStyleOptionFrame() 
      options.initFrom(self) 
      painter.drawPrimitive(QtGui.QStyle.PE_FrameDockWidget, options) 
     options = QtGui.QStyleOptionDockWidgetV2() 
     self.initStyleOption(options) 
     options.title = self.titleText() 
     painter.drawControl(QtGui.QStyle.CE_DockWidgetTitle, options) 

dockWidget = DockWidget() 
dockWidget.setWindowTitle('Tab Text') 
dockWidget.setTitleText('Title Text') 

PS:

Beachten Sie, dass eine weitere Option ist setTitleBarWidget zu verwenden. Der große Nachteil dabei ist jedoch, dass Sie alle nativen Fensterdekorationen verlieren.

Verwandte Themen