【问题标题】:Updating cell widgets changes in a Qtable without selecting the cell更新 Qtable 中的单元格小部件更改而不选择单元格
【发布时间】:2013-05-22 04:10:48
【问题描述】:

我在 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 Widget,这是我在原始代码中使用 self.list 调用的另一个代码

【问题讨论】:

  • 什么都不做 changeState 槽没有被调用吗? 我用“itemSlectionChanged”信号调用函数是什么意思?您可能对此感兴趣:stackoverflow.com/questions/1063734/…
  • “我用“itemSlectionChanged”信号调用函数是什么意思?“-我的意思是我每次选择不同的单元格项目时都会调用这个函数。只有当我选择了单元格时才会调用 ChangeState,但如果我直接按下 checkButton 它不会被调用。

标签: python pyqt4 maya


【解决方案1】:

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

【讨论】:

  • Thx,我认为这应该可以工作,但我必须更改我的一些代码才能工作。有没有QSignalMapper使用的例子,我搜索了一些例子,但我无法完全理解
  • this 怎么样?哪一部分没看懂?如果您遇到问题,请发布您拥有的代码,可能在另一个问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多