Я пытался работать с этим в течение нескольких дней, но безрезультатно, поэтому, надеюсь, вы, ребята, сможете мне помочь.
У меня есть пользовательский QSqlTableModel
, который имеет эту функцию данных:
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)
Ничто из этого не имеет отношения к вопросу, кроме блока BackgroundRole
. Что я пытаюсь сделать, так это когда я щелкаю правой кнопкой мыши tableview
, появляется контекстное меню:
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)
Все, что я пытаюсь сделать, это когда я нажимаю "Mark Step as Executed"
в своем контекстном меню, я хочу, чтобы строка (или даже ячейка, я возьму что угодно) стала красной.
Ничто из того, что я делаю, не работает, и я надеюсь, что кто-то может мне помочь.