0

好吧,我在 Maya2012 中使用 Pyqt4 来制作类似 ui 的参考编辑器。我使用 QtableWidget 制作参考列表,并且每个单元格中都有子小部件。其中一个小部件是卸载或重新加载参考的复选框。我遇到的问题是,如果直接单击复选框而不选择单元格,它不会做任何事情

这是我的代码:

 def listConnections(self):

    self.pos=self.sender().currentRow()

    wid = self.list.ref_l.cellWidget(self.pos, 0).children()

    self.text = self.list.list[self.pos]
    self.ref()

    for wt in wid:
        if type(wt)== type(QCheckBox()):
            wt.stateChanged.connect(self.changeState)

        if type(wt)== type(QComboBox()):
            wt.currentIndexChanged.connect(self.changeType)

我正在使用“itemSlectionChanged”信号调用该函数,因为这是我知道我可以检测到子小部件的唯一方法。所有子小部件都是在我填写列表的那一刻制作的。

有没有办法让我想要什么?

编辑:

这就是我调用函数的方式

self.list.ref_l.itemSelectionChanged.connect(self.listConnections)

这就是我在单元格中创建所有子小部件的方式

 def fillList(self):
    mayaRef = self.findRef()

    if len(mayaRef)>0:
        for count in range(0,len(mayaRef)):

            self.ref_l.insertRow(count)

            wid=QWidget()
            cLayout=QHBoxLayout()
            wid.setLayout(cLayout)

            checkWid=QCheckBox()

            nameWid=QLabel()

            cLayout.addWidget(nameWid)

            nameWid2=QLabel()

            cLayout.addWidget(nameWid2)

            comWid=QComboBox()
            cLayout.addWidget(comWid)

            self.ref_l.setCellWidget(count,0,wid)

self.ref_l 是我的 QTable 小部件,这是我在原始代码中使用 self.list 调用的另一个代码

4

1 回答 1

0

您应该在创建复选框后立即设置所有连接fillList。每个项目都与引用的路径相关联。您可以使用 QSignalMapper 将每个复选框映射到路径,然后将信号映射器连接到您的changeState插槽。然后信号映射器使用您指定的路径调用该插槽。

于 2013-05-21T20:10:48.680 回答