Как я могу сказать QTableWidget закончить редактирование ячейки? - PullRequest
5 голосов
/ 06 февраля 2009

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

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

table.currentIndex()

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

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

Popup menu

Ответы [ 4 ]

7 голосов
/ 06 февраля 2009

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

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

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

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

table.setEditTriggers( QAbstractItemView::NoEditTriggers );
4 голосов
/ 20 июля 2015

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

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

1 голос
/ 23 февраля 2009

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

0 голосов
/ 25 ноября 2015

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...