将 UI 中的值映射到 QTreeWidget 列

Map values from an UI into QTreeWidget Column

抱歉,如果我的以下问题听起来很愚蠢,但我几乎迷失了方向!

我使用 Qt-Designer 创建了 2 UIs。

下面是主要代码: 主要代码 - http://pastebin.com/mbg2fuvh

我在 Maya 中使用以下 运行 它:

import sys
sys.path.insert(0, '/user_data/test')
import UI_test
reload(UI_test)
win = UI_test.MigrationUi()
win.show()

所以基本上我在这里试图实现的是我在 Sub UI 中键入的值没有将值映射到 Main UI。 要复制案例:

  1. 运行执行代码
  2. Select 我已经在搜索过滤器 QTreeWidget 中插入的 2 个项目中的任何一个,然后单击 "Add Selected",它将在其中将其传输到 Migrate ANMG QTreeWidget
  3. Select 迁移 ANMG QTreeWidget 中的一个项目并单击编辑 Selected 按钮
  4. 尝试在 3 个字段中的任何一个中输入一些词等 - 描述/评论/版本评论

我原以为如果我单击 OK 按钮,它会将值映射到列中,但似乎并非如此,尽管我在 Qt Designer 中设置了 signal/slot对于 accepted() / accept()

非常感谢任何指点...

我已经实施了两个解决方案,您需要 comment/uncomment 代码。两种情况下的结果是一样的。

解决方案 1 基于您在 PublishInfoUI class 中使用的资产的参考。一旦您按下 "OK",修改将在 PublishInfoUI class 内完成 self.assets

另一方面,在解决方案 2 中,一旦您按下 "OK",它就会创建一个新的 QTableWidgetItem,然后将其返回给您的 MigrationUI class。然后在这个class.

中进行修改

IMO,如果您将 getValues 重命名为 updateValues 或类似名称,我更喜欢第一个解决方案。但正如我所说,两种情况下的结果都是一样的。

class MigrationUi(QtGui.QWidget):

    ### Some stuff

    def editSelected(self):
        selected_item = self.ui.treeWidget_migrateAnmg.currentItem()

        if selected_item:
            inputWin = PublishInfoUI(selected_item)
            ############################
            # Here is the core modifications
            if inputWin.exec_(): #Triggered if we press "OK"
                #Solution 1:
                inputWin.getValues()
                #End solution 1

                #Solution 2:
                returnedAsset = inputWin.getValues()
                print "Returned asset: "
                print returnedAsset.text(0)
                print returnedAsset.text(1)
                print returnedAsset.text(2)
                print returnedAsset.text(3)
                print returnedAsset.text(4)
                print returnedAsset.text(5)
                print returnedAsset.text(6)
                print returnedAsset.text(7)
                print returnedAsset.text(8)
                selected_item.setText(6, returnedAsset.text(6) )
                selected_item.setText(7, returnedAsset.text(7) )
                selected_item.setText(8, returnedAsset.text(8) )
                #End solution 2
            else:
                print "Canceled/closed operation"
            ############################
        else:
            cmds.warning("Please select an item in ANMG field")


    def slotCancel(self):
        self.close()


class PublishInfoUI(QtGui.QDialog):

    def __init__(self, asset, parent = None, modal = False):
        QtGui.QWidget.__init__(self, parent, modal = modal)

        self.ui = publishInfoUI_test.Ui_PublishInfo()
        self.ui.setupUi(self)
        self.assets = asset

        self.fill_details()

    def fill_details(self):
        self.ui.lineEdit_rigUsed.setText(self.assets.text(0))
        self.ui.lineEdit_anmLocation.setText(self.assets.text(5))
        self.ui.textEdit_comment.setText(self.assets.text(7))

    def getValues(self):
        #Solution 1:
        #Do the modification here
        self.assets.setText(6, self.ui.lineEdit_description.text() )
        self.assets.setText(7, self.ui.textEdit_comment.toPlainText() )
        self.assets.setText(8, self.ui.textEdit_Vcomment.toPlainText() )
        #End solution 1

        #Solution2:
        #Return a new asset and do the modification in MigrationUi class
        assetToReturn = QtGui.QTreeWidgetItem()
        assetToReturn.setText(6, self.ui.lineEdit_description.text() ) #Feel free to add more infos if necessary
        assetToReturn.setText(7, self.ui.textEdit_comment.toPlainText() )
        assetToReturn.setText(8, self.ui.textEdit_Vcomment.toPlainText() )
        return assetToReturn
        #End solution 2