Как я могу сообщить QTableWidget о прекращении редактирования ячейки?

StackOverflow https://stackoverflow.com/questions/518447

  •  21-08-2019
  •  | 
  •  

Вопрос

Я показываю всплывающее меню для выбора некоторых значений в QTableWidget.Самый нижний элемент — это запись «Изменить список», когда я выбираю ее, должно автоматически появиться новое окно, QComboBox должен исчезнуть, а ячейка вернется в состояние Qt::DisplayRole.

Теперь в Qt есть все эти приятные API-вызовы, такие как QTableWidget.edit() и QTableWidget.editItem(), то, что я действительно ищу, это QTableWidget.endEditing(), желательно без указания индекса ячейки, хотя я мог бы получить его с помощью этого вызова:

table.currentIndex()

… но я не знаю, могу ли я гарантировать, что текущая ячейка постоянно редактируется.

Есть ли API для закрытия таких редакторов?

Popup menu

Это было полезно?

Решение

QTableWidget наследует 19 публичных слотов от QWidget.Одним из них является setDisabled(), который должен отключать события ввода для этого виджета и всех его дочерних элементов.

Я бы попробовал:

table.setDisabled( true );
table.setDisabled( false );

Хотя вы сказали, что вам это не подходит, есть альтернативный метод:Если вам это не нравится (я думаю, таблица теряет фокус), вы можете попробовать использовать Редактировать триггеры.Например:

table.setEditTriggers( QAbstractItemView::NoEditTriggers );

Другие советы

table.setCurrentItem(None) это то, что сработало для меня.(Не забудьте заблокировать сигналы, если вы используете какую-либо функцию слота cellChanged/itemChanged.)

Это с PyQt.Для C++ я думаю заменить None на NULL.

Возможно, вы сможете использовать QTableWidget.closePersistentEditor(), чтобы закрыть редактор.Однако QAbstractItemView.closeEditor() может быть ближе к тому, что вам нужно, тем более, что вы, похоже, знакомы с API на основе QModelIndex и уже используете собственный виджет редактора.

Я не могу говорить о виджетах списков.Но я пришел сюда, пытаясь сделать что-то подобное.

Я дважды щелкал ячейку и на основе столбца открывал подформу со списком, а затем, когда она была закрыта, переходил к следующему соответствующему столбцу в зависимости от выбранного значения.

Моя проблема заключалась в том, что я мог получить значение в ячейке и «выбрать» следующую соответствующую ячейку, но исходная ячейка оставалась выбранной в режиме редактирования!

До меня наконец дошло, что мой двойной щелчок выделял ячейку, т.е.редактирование.

Один щелчок выбирает ячейку, но не открывает режим редактирования.

Примечание:Никогда не удавалось заставить эту подформу работать по-настоящему модально, поэтому я создал цикл в вызывающей форме:в то время как подформа была видна, и единственным кодом был app.processEvents()

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top