次の列を持つ QTableWidget があります。
Username Password URL Status
+----------+-----------+---------+---------+
| user1 | passwd1 | url.com | OK |
| user2 | passwd2 | url.com | FAIL |
+----------+-----------+---------+---------+
私のアプリケーションのワーカーQThread
では、テーブルに表示されたデータを含むシグナルが発行されます。ただし、このデータは後で更新する必要があります (特に [ステータス] 列)。
たとえば、2行目だけを更新できるようにしたいと思います。これまでのところ、テーブル内のすべての行をループしてから、一意のフィールド (ユーザー名など) をソフトウェアから送信されたデータと一致させようとしました。したがって、行 2 のステータスを「FAIL」から「RETRY」に更新する必要がある場合、GUI スレッドに送信されるシグナルには、ユーザー名とステータス文字列が含まれます。次に、2 つの文字列 (信号からの文字列、つまり QThread と現在テーブルにある文字列) を比較し、一致する場合はテーブルを更新します。うまくいけば、これは理にかなっています。
問題は、これが実行可能な解決策であるかどうか疑問に思っていますか? 他にある?QTableWidget に別の「隠し」列を追加することを検討しました。これには、すべての QThread によって生成されたランダムな文字列が含まれ、更新されます。しかし、原則は同じです。
誰かが私に何か指針を与えることができますか?
編集: リクエストごとにコードを追加:
これは私のGUIスレッドコードです(検索と更新部分):
def writeToMainTable(self, param):
username = param['username']
statusText = param['statusText']
for i in xrange(self.mainTable.currentRowCount()):
if username == self.mainTable.item(i, 0).text():
found = True
activerow = i
if found:
if statusText is not None: self.mainTable.setItem(activerow, 3, QTableWidgetItem(statusText))
QThread には次のようなものがあります。
def sendToTable(self, param): #param is a dict here as well
self.mainsig.emit(param)