Qtabwidget mit Kontrollkästchen im Titel
-
26-10-2019 - |
Frage
Ich habe mich gefragt, wie man (mit PYQT4) a abgeleitet wird QTabWidget
Mit einem Kontrollkästchen neben jedem Registerkarte? So was:
Lösung
Eigentlich habe ich mich nur für qtabwidget unterschließt.
Das Kontrollkästchen wird bei der Erstellung einer neuen Registerkarte hinzugefügt und in einer Liste gespeichert, um den Index zurückzugewinnen.
SETCheckstate/ISSCECKED -Methoden sollen den Status jedes Kontrollkästchens steuern, das durch den Registerkartenindex angegeben ist.
Schließlich wird das Signal "staatsechange (int)" erfasst und mit einem zusätzlichen Parameter überwiesen, in dem der Index des betreffenden Kontrollkästchens angegeben ist.
class CheckableTabWidget(QtGui.QTabWidget):
checkBoxList = []
def addTab(self, widget, title):
QtGui.QTabWidget.addTab(self, widget, title)
checkBox = QtGui.QCheckBox()
self.checkBoxList.append(checkBox)
self.tabBar().setTabButton(self.tabBar().count()-1, QtGui.QTabBar.LeftSide, checkBox)
self.connect(checkBox, QtCore.SIGNAL('stateChanged(int)'), lambda checkState: self.__emitStateChanged(checkBox, checkState))
def isChecked(self, index):
return self.tabBar().tabButton(index, QtGui.QTabBar.LeftSide).checkState() != QtCore.Qt.Unchecked
def setCheckState(self, index, checkState):
self.tabBar().tabButton(index, QtGui.QTabBar.LeftSide).setCheckState(checkState)
def __emitStateChanged(self, checkBox, checkState):
index = self.checkBoxList.index(checkBox)
self.emit(QtCore.SIGNAL('stateChanged(int, int)'), index, checkState)
Dies ist vielleicht nicht der perfekte Weg, um Dinge zu tun, aber zumindest bleibt es ziemlich einfach und deckt alle meine Bedürfnisse ab.
Andere Tipps
Der beste Ansatz wäre zu
- Erstellen Sie eine benutzerdefinierte Tabbank, CheckedTabbar (Erben
QTabBar
) - Erstellen Sie ein benutzerdefiniertes Tabwidget, CheckedTabWidget (Erben
QTabWidget
) - Fügen Sie einen Weg hinzu, um zu testen, ob eine Registerkarte aktiviert ist oder nicht, und möglicherweise einige Signale, wenn das Kontrollkästchen umgeschaltet ist :)
Sie sollten Ihre benutzerdefinierte Tabbank im CheckedTabWidget -Konstruktor wie folgt einstellen:
CheckedTabWidget::CheckedTabWidget(QWidget* parent) : QTabWidget(parent)
{
setTabBar(new CheckedTabBar(this));
}