QTabWidget с CheckBox в заголовке - PullRequest
       31

QTabWidget с CheckBox в заголовке

4 голосов
/ 28 апреля 2011

Мне было интересно, как создать (используя PyQt4) производное QTabWidget с флажком рядом с заголовком каждой вкладки? Как это:

Ответы [ 2 ]

8 голосов
/ 07 мая 2011

На самом деле я выбрал только подкласс QTabWidget.
CheckBox добавляется при создании новой вкладки и сохраняется в списке для возврата его индекса.
Методы setCheckState / isChecked предназначены для управления состоянием каждого checkBox, указанного в его индексе вкладки.
Наконец, сигнал «stateChanged (int)» захватывается и передается с дополнительным параметром, указывающим индекс соответствующего checkBox.

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)

Возможно, это не идеальный способ сделать что-то, но, по крайней мере, он остается довольно простым и покрывает все мои потребности.

2 голосов
/ 28 апреля 2011

Наилучшим подходом было бы

  • Создание пользовательского TabBar CheckedTabBar (наследование QTabBar)
  • Создание пользовательского TabWidget CheckedTabWidget (наследованиеQTabWidget)
  • Добавить способ проверки, если вкладка отмечена или нет, и, возможно, некоторые сигналы при переключении флажка:)

Выследует установить вашу пользовательскую панель вкладок в конструкторе checkedtabwidget, например:

CheckedTabWidget::CheckedTabWidget(QWidget* parent) : QTabWidget(parent)
{
    setTabBar(new CheckedTabBar(this));
}
...