Прошу помощи. Который день копаю справку, не могу найти нужный сигнал.
Смысл такой: в виджете таблицы в ячейке вводится текст, нажимается энтер, и в этот момент должна запустится моя функция с индексом, указывающим, какая ячейка (столбец-строка) изменена
Пробовал DataChanged, но что-то не вышло. Может, что-то сделал не так с недосыпа?
Короче, как сделать?
Если бы было время, не спрашивал бы, сам бы разобрался. Но времени нет.
Здравствуйте, Molchalnik, Вы писали:
M>Прошу помощи. Который день копаю справку, не могу найти нужный сигнал. M>Смысл такой: в виджете таблицы в ячейке вводится текст, нажимается энтер, и в этот момент должна запустится моя функция с индексом, указывающим, какая ячейка (столбец-строка) изменена M>Пробовал DataChanged, но что-то не вышло. Может, что-то сделал не так с недосыпа? M>Короче, как сделать? M>Если бы было время, не спрашивал бы, сам бы разобрался. Но времени нет. M>Help me!!!
У тебя должно в итоге вызываться в модели setData, там уже делай emit dataChanged.
более общий случай написал. Мой пример подходит именно для тех случаев, когда нужно кидать сигнал только при пользовательском вводе. Если данные менять программно, то у меня сигнал не кинется.
Здравствуйте, SaZ, Вы писали:
SaZ>Здравствуйте, Molchalnik, Вы писали:
M>>... M>>Если бы было время, не спрашивал бы, сам бы разобрался. Но времени нет.
SaZ>Вот такое лучше не писать вообще. Это ваши проблемы. И это неуважение к собеседникам.
Простите, Вы меня неверно поняли. Никакого неуважения.
M>>Help me!!!
SaZ>Делайте свой делегат, переопределив один метод:
Благодарю.
Re[3]: TableView: сигнал об окончании редактирования
Здравствуйте, Molchalnik, Вы писали:
SaZ>>Вот такое лучше не писать вообще. Это ваши проблемы. И это неуважение к собеседникам. M>Простите, Вы меня неверно поняли. Никакого неуважения.
Представьте ситуацию. Вы сидите, работаете, и тут к вам прибегают с просьбой: "Срочно сделай за меня мою работу, у меня нет времени, я еду в кино. Денег я тебе за это не дам. За хороший ответ оценку на сайте не выставлю.".
Замотивирует вас такое? Лично меня — не особо. Потому что я трачу своё время, чтобы вам помочь. А помогать в первую очередь хочется тому, кто действительно в помощи нуждается и самостоятельно не может справиться (вариант с "нет времени" — это не "не могу", а "не хочу").
Re[4]: TableView: сигнал об окончании редактирования
Здравствуйте, SaZ, Вы писали:
SaZ>Здравствуйте, Molchalnik, Вы писали:
SaZ>>>Вот такое лучше не писать вообще. Это ваши проблемы. И это неуважение к собеседникам. M>>Простите, Вы меня неверно поняли. Никакого неуважения.
SaZ>Представьте ситуацию. Вы сидите, работаете, и тут к вам прибегают с просьбой: "Срочно сделай за меня мою работу, у меня нет времени, я еду в кино. Денег я тебе за это не дам. За хороший ответ оценку на сайте не выставлю.". SaZ>Замотивирует вас такое?
поэтому я и говорю, что Вы меня неверно поняли.
"нет времени" — это не "я могу сделать сам, но хочу в кино с девчонкой" , а "неделю бьюсь над задачей, а завтра сдавать".
И в том, что я упомянул, что время по объективным причинам поджимает (=сроки сдачи проекта подходят), никакого неуважения нет.
Вы вложили тот контекст, который Вам ближе и который исходит из Вашего опыта. Но Ваш опыт уникален, и нужно, имхо, всегда исходить из а) более широкого взгляда, учитывать многозначность реплик, т.е. стремится к большей объективности б) исходить из презумции невиновности
Надеюсь, так моя позиция более понятна. С уважением, Молчальник.
Re[5]: TableView: сигнал об окончании редактирования
Здравствуйте, Molchalnik, Вы писали:
M>Надеюсь, так моя позиция более понятна. С уважением, Молчальник.
Мне всё понятно и вас я понял. Просто на многих форумах (тут, stackoverflow и т.п.) так не принято. Никаких претензий, надеюсь я вам помог . Свой первый ответ я чуток дописал.
Re[4]: TableView: сигнал об окончании редактирования
Здравствуйте, SaZ, Вы писали:
SaZ>Здравствуйте, Molchalnik, Вы писали:
SaZ>>>Вот такое лучше не писать вообще. Это ваши проблемы. И это неуважение к собеседникам. M>>Простите, Вы меня неверно поняли. Никакого неуважения.
SaZ>Я понимаю, что с вашей стороны нет никакого неуважения. Просто другим так не кажется. Для ознакомления: SaZ>http://rsdn.ru/Info/Howtoask.xml SaZ>http://stackoverflow.com/help/how-to-ask
SaZ>Представьте ситуацию. Вы сидите, работаете, и тут к вам прибегают с просьбой: "Срочно сделай за меня мою работу, у меня нет времени, я еду в кино. Денег я тебе за это не дам. За хороший ответ оценку на сайте не выставлю.". SaZ>Замотивирует вас такое? Лично меня — не особо. Потому что я трачу своё время, чтобы вам помочь. А помогать в первую очередь хочется тому, кто действительно в помощи нуждается и самостоятельно не может справиться (вариант с "нет времени" — это не "не могу", а "не хочу").
неуместная аналогия. вас лично никто не заставляет тратить свое драгоценное время для того, чтобы ответить кому-то.
и мотивация простая — чувство удовлетворения от того, что помог кому-то (человек — существо социальное, и в нем зашита эта потребность в помощи другому) + повышение самооценки.
п.с. по моему опыту, высококвалифицированные спецы даже не задумываются над такими мелочами ("ты меня не уважаешь"), а просто походя отвечают или не отвечают.
Re[2]: TableView: сигнал об окончании редактирования
более общий случай написал. Мой пример подходит именно для тех случаев, когда нужно кидать сигнал только при пользовательском вводе. Если данные менять программно, то у меня сигнал не кинется.
Некропостинг, да Но по теме. Сейчас разбираюсь с этой ша(р)манкой. И у меня вопрос. Что вы подразумеваете под программным изменением данных?
В моей программе данные это список, элементами которого являются структуры. tableView отображает через модель эти данные в виде таблицы, каждая строка — элемент списка. И реализован делегат, как вы рекомендовали.
Если я чисто программно добавляю элемент к списку между вызовами beginReset() endReset() для модели, то изменение данных в отображении происходит корректно, но ни setModelData() в делегате, ни setData() в модели не вызываются.
А если редактирую вручную данные в tableView, то вызываются и setModelData() в делегате, и setData() в модели.
Т.е. у меня получается, что и ваш вариант, и вариант Igore
более общий случай написал. Мой пример подходит именно для тех случаев, когда нужно кидать сигнал только при пользовательском вводе. Если данные менять программно, то у меня сигнал не кинется.
D>Некропостинг, да Но по теме. Сейчас разбираюсь с этой ша(р)манкой. И у меня вопрос. Что вы подразумеваете под программным изменением данных?
D>В моей программе данные это список, элементами которого являются структуры. tableView отображает через модель эти данные в виде таблицы, каждая строка — элемент списка. И реализован делегат, как вы рекомендовали.
D>Если я чисто программно добавляю элемент к списку между вызовами beginReset() endReset() для модели, то изменение данных в отображении происходит корректно, но ни setModelData() в делегате, ни setData() в модели не вызываются. D>А если редактирую вручную данные в tableView, то вызываются и setModelData() в делегате, и setData() в модели.
D>Т.е. у меня получается, что и ваш вариант, и вариант Igore
равносильны? (при условии, что имеем одно окошко tableView, один экземпляр делегата и один экземпляр модели)
Мне непонятен ваш вопрос. Если вы обновляете целиком модель — то begin/end reset достаточно. Если вы точечно обновляете определённые элементы в какой-то одной позиции, то тогда уже через setData, которые должы дёргать уже emit dataChanged.
Re[4]: TableView: сигнал об окончании редактирования
Здравствуйте, SaZ, Вы писали:
SaZ>Если вы точечно обновляете определённые элементы в какой-то одной позиции, то тогда уже через setData, которые должы дёргать уже emit dataChanged.
С любыми манипуляциями данных begin/end reset хорошо себя показывает. Давеча решал как раз задачу обновления не через пользовательский ввод ячеек таблицы, а когда данные меняются "где-то там".