Есть ли способ испускать сигнал, когда ячейка редактируется с тем же значением? - PullRequest
2 голосов
/ 09 мая 2019

Мне нужно изменить шрифт ячейки в QTableWidget, если пользователь изменяет текст в нем, ДАЖЕ, если текст совпадает с текстом по умолчанию.

Я использовал для этого сигнал itemChanged из таблицы, но здесь я застрял, потому что сигнал не будет повышаться, если пользователь введет точно такой же текст.

        item = QtWidgets.QTableWidgetItem("42")
        self.my_table.setItem(0, 0, item)

        self.my_table.itemChanged.connect(self.update)

    def update(self, cell):
        print("update")
        self.my_table.itemChanged.disconnect(self.update)

        font = cell.font()
        if cell.text() == "":
            cell.setText("42")
            font.setUnderline(False)
        else:
            font.setUnderline(True)
        cell.setFont(font)

        self.my_table.itemChanged.connect(self.update)
  • зная:

    • текст по умолчанию в ячейке "42"
    • шрифт по умолчанию не подчеркнут, другой -
  • Дело 1:

    • Тип пользователя "3" -> текст становится подчеркнутым
    • Тип пользователя "42" -> текст остается подчеркнутым
  • Дело 2:

    • Тип пользователя "42" -> текст должен стать подчеркнутым

Почему это не так? :
Потому что сигнал ItemChanged не сработает, если пользователь введет то же самое.

Должен ли я использовать другой сигнал? (не нашел ничего, что соответствовало бы моим потребностям)
Есть ли другой способ сделать это?

Почему имеет смысл пытаться это сделать? :
Пользователь хочет сделать различие между значением, которое является значением по умолчанию, и значением, которое является ИСПРАВЛЕННЫМ для значения (и не заботится, является ли это фиксированное значение значением по умолчанию или нет, потому что значение по умолчанию может измениться).
Также, если пользователь хочет установить значение по умолчанию, он может очистить ячейку.

...