Название: Save автоматом Отправлено: Igors от Апрель 06, 2015, 16:08 Добрый день
Есть контейнер таких простых структур Код Ну и mName отображается в QListWidget а mText в QTextEdit. Юзер нажал на mName - подставился mText в QTextEdit, этот текст можно редактировать. Как теперь автоматом/пулеметом сохранять все изменения в контейнере? (спрашивать юзера не нужно, сохранять всегда) Спасибо Название: Re: Save автоматом Отправлено: Пантер от Апрель 06, 2015, 16:10 QLineEdit::textEdited
Название: Re: Save автоматом Отправлено: Igors от Апрель 06, 2015, 16:42 QLineEdit::textEdited Тексты там конечно небольшие (скрипты), но все же сейвить ВСЕ при каждом вводе символа - религия не позволяет :) Название: Re: Save автоматом Отправлено: Пантер от Апрель 06, 2015, 16:44 Тогда editFinished. В чем конкретно у тебя проблема?
Название: Re: Save автоматом Отправлено: Пантер от Апрель 06, 2015, 16:44 А я бы таки кнопочку сохранения справа от эдита разместил бы.
Название: Re: Save автоматом Отправлено: Igors от Апрель 06, 2015, 16:59 Тогда editFinished. В чем конкретно у тебя проблема? Так нет editingFinished для QTextEdit - а вообще у меня там Scintilla, но не сутьПример: пользователь выбрал первый айтем в листе, напр "Name1" и набрал что-то в редакторе. Теперь он переключается в листе на "Name2" или добавил еще "Name3". Текущий текст надо сохранить, т.к. будет другой. Название: Re: Save автоматом Отправлено: sociopath от Апрель 06, 2015, 17:13 Код: void MainWindow::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) Название: Re: Save автоматом Отправлено: Igors от Апрель 06, 2015, 17:23 Код: void MainWindow::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) Спасибо Название: Re: Save автоматом Отправлено: Пантер от Апрель 07, 2015, 08:03 Тьфу, чот я не заметил, что QTextEdit. Звыняйте.
Название: Re: Save автоматом Отправлено: Igors от Апрель 07, 2015, 09:44 Попробовал с сигналом currentItemChanged - тоже не фонтан. Проблема (типовая) что сигналы эти испускаются не только когда юзверь сменил selection, но и во многих др случаях, напр при очистке и перезаполнении списка, при перетаскивании (изменении порядка) айтемов и.т.п. Приходится рыться в каждом конкретном случае и затыкать дырки. Хорошей, ясной схемы так и не нашел.
Название: Re: Save автоматом Отправлено: sociopath от Апрель 07, 2015, 11:44 Я обычно перед исполнением всех "непользовательских" событий отключаю такие сигналы, а потом включаю. Не знаю, насколько это хороший способ, но ничего другого не придумал.
ps: была еще идея обрабатывать все пользовательские события, такие как keyPressEvent, mousePressEvent и пр., но мне лично это показалось жутким оверхедом Название: Re: Save автоматом Отправлено: sociopath от Апрель 07, 2015, 12:04 В принципе можно ввести свой ListWidget, унаследованный от QListWidget с сигналом
Код: void currentItemChangedByUser(QListWidgetItem *current, QListWidgetItem *previous); и переопределить события: Код: void ListWidget::mousePressEvent(QMouseEvent *event) Но имхо тоже могут быть подводные камни и придется допиливать напильником Название: Re: Save автоматом Отправлено: Igors от Апрель 07, 2015, 14:16 В принципе можно ввести свой ListWidget, унаследованный от QListWidget с сигналом Ну как-то хорошего впечатления не производит :) Ведь selection может смениться и "извне", программно, не только от мыши и клавы. Пока сделал флажки mSaveDisabled и mInDrag и окружаю ими неприятные места (там где заполняю лист и DnD). Не блеск конечноКод: void currentItemChangedByUser(QListWidgetItem *current, QListWidgetItem *previous); и переопределить события: Название: Re: Save автоматом Отправлено: sociopath от Апрель 07, 2015, 14:51 Как вариант обязывать все функции, меняющие select, вызывать ту же функцию, которая выполняется по сигналу currentItemChangedByUser. Имхо так код будет более прозрачный, чем с флагами.
|