2015-03-02 10 views
0

извините, если мой следующий вопрос звучит глупо, но я в значительной степени потерял, большой путь!Значения карты из пользовательского интерфейса в QTreeWidget Column

Я создал 2 пользовательских интерфейса, используя Qt-Designer.

А следующий главный код: Основной код - http://pastebin.com/mbg2fuvh

И я использую для его запуска в майя:

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

Так что в основном я пытаюсь достичь здесь, так что значения, которые я набрал в Sub UI, не сопоставляют значения с основным пользовательским интерфейсом. Чтобы повторить случай:

  1. Выполнить код выполнения
  2. Выберите любой из 2-х элементов, которые я уже вставленных в фильтр поиска QTreeWidget и нажмите на «Добавить выбранное», в котором он будет передает его в Перенесите ANMG QTreeWidget
  3. Выберите элемент в Migrate ANMG QTreeWidget и нажмите на кнопку Edit Selected
  4. Попробуйте ввода некоторых слов и т.д. в любой из 3-х полей - Описание/Комментарий/версия Комментарий

я подумал, что если я нажимаю кнопку OK, он будет отображаться значения в столбцы, но это не кажется, что дело, несмотря на меня установив сигнал/слот в конструкторе Qt для accepted()/accept()

ЗНАЧИТЕЛЬНО оценить для любых указателей ...

ответ

1

Я реализовал два решения, вам нужно будет прокомментировать/раскомментировать код. В обоих случаях результат один и тот же.

Решение 1 основано на ссылке на ресурс, который вы используете в классе PublishInfoUI и. Когда вы нажмете «OK», модификации выполняются внутри класса PublishInfoUI на self.assets.

С другой стороны в решении 2, как только вы нажмете «ОК», он создаст новый QTableWidgetItem, который установлен, а затем возвращается в ваш класс MigrationUI. Затем модификации выполняются в этом классе.

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 
+0

Я опробовал оба решения, и он работает! Интересно, можете ли вы сказать мне, почему решение 2 не предпочтительнее? Например. Сложнее поддерживать/отлаживать и т. Д.? – yan

+0

Извините, еще один вопрос. В моем mainUI для кнопки «publish», которую я имел, требуется, чтобы значения были захвачены как из QTreeWidget в Migrate Anmg, так и в subUI, можно ли это сделать? Например, мне понадобится 'Type' в subUI, в котором у mainUI нет столбцов для него – yan

+0

На французском языке мы имеем выражение, в котором говорится:« Это вопрос вкуса и цвета », это применимо здесь.Я предпочитаю, чтобы решение 1 выполняло эту работу. Что может сказать пользовательский интерфейс миграции: «Если вы хотите обновить QTreeWidget, сделайте это полностью, не верните мне QTreeWidgetItem, чтобы завершить работу для вас». Решение 2 примерно в два раза больше кода решения 1, даже если это всего лишь небольшое количество кода, это может привести к большей ошибке. Да ... как я сказал, вопрос вкуса и цвета, просто используйте тот, с которым вы чувствуете себя более комфортно. – DrHaze

 Смежные вопросы

  • Нет связанных вопросов^_^