Как программно зафиксировать данные из QTableWidget, которые содержат некоторые элементы в состоянии редактирования? - PullRequest
4 голосов
/ 01 сентября 2010

Как я могу автоматически передавать данные из QTableWidget, который находится в состоянии редактирования, когда я запускаю какую-то команду?

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

Как программно завершить редактирование в таблице?

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

OOPS: слишком много работало, так что не поняла, что может быть только один ожидающий редактор одновременно. Вопрос все еще здесь.

Ответы [ 3 ]

4 голосов
/ 20 февраля 2012

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

table-> setCurrentIndex (QModelIndex ())

плюс восстановление вашего предыдущего текущего индекса впоследствии, если виджет еще не удален.

4 голосов
/ 01 сентября 2010

В tableWidget есть защищенный слот с именем commitData.Вы можете наследовать от tableWidget, затем добавить свой собственный публичный метод (или слот) и оттуда отправить сигнал (или просто вызвать метод commitData).Есть одна проблема.Вам нужно будет предоставить объект редактора, но tableWidget не дает вам способа получить нужный вам указатель.Если вы используете свой собственный метод createEditor, вы можете сохранить указатель на редактор где-нибудь, где ваш метод может его получить.Это хак, но это единственный способ, который я знаю.

0 голосов
/ 12 сентября 2015

Это довольно старый вопрос, но он все еще поднимается довольно высоко в Google, так что на всякий случай, если кому-то еще понадобится ответ, у QTableView есть защищенный метод

void currentChanged(const QModelIndex &current, const QModelIndex &previous)

, который вызывает фиксацию данных и QTableWidgetпостроен на QTableView, так что все еще должен работать.Я нашел эту информацию на форуме Qt .

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