如何自动选择所有QTreeWidgetItem小部件

0 投票
1 回答
1010 浏览
提问于 2025-04-18 16:46

这段代码创建了一个 QTreeWidget,里面有 QComboBoxQLineEdit 作为 item widgets(使用 setItemWidget() 方法来设置)。当你点击某个项目的名字(比如 'Item_1'、'Item_2' 等等)时,这个项目会被“选中”,但是它里面的那些小部件(item widgets)却不会被选中。有没有什么 QTreeWidgetItem 的标志或者属性可以设置,让点击项目时它里面的所有小部件都自动选中呢?

在这里输入图片描述

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Tree(QtGui.QTreeWidget):
    def __init__(self, *args, **kwargs):
        super(Tree, self).__init__()
        for each in ['Item_1','Item_2','Item_3','Item_4','Item_5']:
            item=QtGui.QTreeWidgetItem([each])
            self.addTopLevelItem(item)
            self.setItemWidget(item, 1, QtGui.QComboBox())
            self.setItemWidget(item, 2, QtGui.QLineEdit())
        self.setColumnCount(5)
        self.resize(360,240)
        self.show()

tree=Tree()
sys.exit(app.exec_())

1 个回答

1

当你点击某个项目时,可以使用信号 void itemClicked (QTreeWidgetItem*,int),这样它的子项目会自动被选中。在这个例子中,我会自动选择 QLineEdit

首先,要连接 QTreeWidget 的信号 void itemClicked (QTreeWidgetItem*,int)

最后,从当前的 QTreeWidgetItem 获取当前项目的小部件,并将其设置为焦点。

import sys
from PyQt4 import QtCore, QtGui

class Tree(QtGui.QTreeWidget):
    ENUM_COMBOBOX = 1
    ENUM_LINEEDIT = 2
    def __init__(self, *args, **kwargs):
        super(Tree, self).__init__()
        for each in ['Item_1','Item_2','Item_3','Item_4','Item_5']:
            item=QtGui.QTreeWidgetItem([each])
            self.addTopLevelItem(item)
            self.setItemWidget(item, self.ENUM_COMBOBOX, QtGui.QComboBox())
            self.setItemWidget(item, self.ENUM_LINEEDIT, QtGui.QLineEdit())
        self.setColumnCount(5)
        self.resize(360,240)
        self.show()
        self.connect(self, QtCore.SIGNAL('itemClicked (QTreeWidgetItem *, int)'), self.itemClickedEvent)

    def itemClickedEvent (self, currentQTreeWidgetItem, column):
        currentQWidget = self.itemWidget(currentQTreeWidgetItem, self.ENUM_LINEEDIT)
        currentQWidget.setFocus()

app = QtGui.QApplication([])
tree=Tree()
sys.exit(app.exec_())

itemClicked 方法参考 : http://pyqt.sourceforge.net/Docs/PyQt4/qtreewidget.html#itemClicked


祝好,

撰写回答