Saya sudah mencoba mengerjakan ini selama berhari-hari, tetapi tidak berhasil, jadi semoga kalian dapat membantu saya.
Saya punya QSqlTableModel
khusus yang memiliki ini sebagai fungsi datanya:
def data(self, index, role):
#Formats Cells according to data in them
if role == QtCore.Qt.TextAlignmentRole:
if index.column() == 2:
text = QtSql.QSqlTableModel.data(self, self.index(index.row(), 2), QtCore.Qt.DisplayRole)
if text.split():
if not re.search(r'start|Z[NARXTFEISL]|gv', text.split()[0], re.I):
return QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop
else: return QtCore.Qt.AlignLeft
else: pass
else: return QtCore.Qt.AlignLeft
if role == QtCore.Qt.BackgroundRole:
if 'MILESTONE' in QtSql.QSqlTableModel.data(self, self.index(index.row(), 2), QtCore.Qt.DisplayRole):
return QtGui.QBrush(QtCore.Qt.yellow)
return QtSql.QSqlTableModel.data(self, index, role)
Tidak ada satupun yang benar-benar relevan dengan pertanyaan kecuali blok BackgroundRole
. Apa yang saya coba lakukan adalah ketika saya mengklik kanan pada tableview
, menu konteks muncul:
menu = QMenu()
stepx = menu.addAction('Mark Step as Executed')
stepdx = menu.addAction('Clear Step Execution')
action = menu.exec_(self.tableView.mapToGlobal(pos))
index = self.model.index(self.tableView.rowAt(pos.y()), 2)
if action == stepx:
logging.info(' Executed Step: ' + str(self.tableView.rowAt(pos.y()) + 1))
self.model.setData(index, QtCore.QVariant(QtGui.QBrush(QtCore.Qt.red)), QtCore.Qt.BackgroundRole)
Yang saya coba lakukan adalah ketika saya mengklik "Mark Step as Executed"
pada menu konteks saya, saya ingin baris (atau bahkan sel, saya akan mengambil apa pun saat ini) berubah menjadi merah.
Apa yang saya lakukan tidak ada yang berhasil dan saya berharap seseorang dapat membantu saya.