我想知道如何创建(使用PyQt4)派生的QTabWidget
,每个标题标题旁边都有一个复选框?像这样:
答案 0 :(得分:8)
实际上我只选择了QTabWidget的子类
复选框在创建新选项卡时添加并保存到列表中以便返回其索引
setCheckState / isChecked方法用于控制由其选项卡索引指定的每个checkBox的状态
最后,捕获“stateChanged(int)”信号,并使用指定相关复选框索引的额外参数进行汇总。
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)
这可能不是完美的做事方式,但至少它仍然非常简单,涵盖了我的所有需求。
答案 1 :(得分:2)
最好的方法是
QTabBar
)QTabWidget
)您应该在checkedtabwidget构造函数中设置自定义tabbar,如下所示:
CheckedTabWidget::CheckedTabWidget(QWidget* parent) : QTabWidget(parent)
{
setTabBar(new CheckedTabBar(this));
}