Frage

Ich habe mich gefragt, wie man (mit PYQT4) a abgeleitet wird QTabWidget Mit einem Kontrollkästchen neben jedem Registerkarte? So was:

War es hilfreich?

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));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top