Russian Qt Forum

Qt => Model-View (MV) => Тема начата: NetWorm от Октябрь 01, 2011, 12:28



Название: QTableWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 01, 2011, 12:28
QTreeWidget - которая заполняется из БД... затем я в ручную создаю элемент в дереве т.е. на редактирование открыт только текущий... Теперь вопрос как мне определить нажатие ентер т.е. указать что я иминно выхожу из редактирования??


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: kambala от Октябрь 01, 2011, 12:34
сигнал itemChanged наверное


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 01, 2011, 12:44
Ну да а как мне например определить что именно этот элемент открыт на редактирование? т.е. как мне узнать установлен ли Qt::ItemIsEditable для него или нет?


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: kambala от Октябрь 01, 2011, 13:13
ну ты на параметры сигнала посмотри ;) вот только Qt::ItemIsEditable просто означает, что элемент можно редактировать


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 01, 2011, 13:20
Не понял где его смотреть?


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: kambala от Октябрь 01, 2011, 15:24
в документации (ассистенте например) на QTreeWidget


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 02, 2011, 10:48
Код:
void frmUslugi::on_treeWidget_itemChanged(QTreeWidgetItem *item, int column)
{
    if (item->flags().operator &(Qt::ItemIsEditable)){
        qDebug() << "123";
        //item->setFlags(item->flags() ^ Qt::ItemIsEditable);
    }
}

Это происходит как создании элемента, так и при завершении редактирования!

Как мне можно отловить нажатие на кнопку Enter. Объясняю мне нужно после редактирования задавать вопрос стоит ли сохранять значение в Базе данных....


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: blood_shadow от Октябрь 02, 2011, 11:41

Как мне можно отловить нажатие на кнопку Enter. Объясняю мне нужно после редактирования задавать вопрос стоит ли сохранять значение в Базе данных....

Вариант 1: сабкласс QTreeWidget, переопределить keyPressEvent ( QKeyEvent * event ), и там ловить твой ентер
Вариант 2: installEventFilter на твой QTreeWidget

возьми книгу Бланшета, глава 7 помойму "обработка событий" там такое есть


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 02, 2011, 11:45
Вот сейчас и пробую именно второй вариант делать!!!


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 02, 2011, 12:07
Благодарю за ссылку на источник!!!


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 08, 2011, 14:54
Как к QTableWidget применить setModel? Ругается на то что она приват!!


Название: Re: QTreeWidget определить что закончилось редактирование!!
Отправлено: iroln от Октябрь 08, 2011, 15:12
Как к QTableWidget применить setModel? Ругается на то что она приват!!
Чтобы установить модель нужно использовать QTableView, а не QTableWidget. QTableWidget - это элементо-ориентированный компонент, а QTableView позволяет использовать архитектуру модель-представление.


Название: Re: QTableView определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 08, 2011, 15:23
Как же тогда отловить событие окончания редактирования ячейки QTableView


Название: Re: QTableWidget определить что закончилось редактирование!!
Отправлено: iroln от Октябрь 08, 2011, 15:31
Если у вас есть модель, которая работает с данными из вашей БД, то отловить окончание редактирования ячейки можно непосредственно в методе setData вашей модели, до того, как данные будут обновлены в БД. Если метод setData возвращает false, то данные в ячейке, которую вы редактировали устанавливаются (вид автоматически обновляется) в прежнее состояние (до редактирования).


Название: Re: QTableWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 08, 2011, 15:42
Так... Вот что пока получилось...

при инициализации формы делаю
Код:
connect(tabl,SIGNAL(dataChanged(QModelIndex,QModelIndex)),this,SLOT(editFinish(QModelIndex)));

Код:
void frmUslugi::editFinish(QModelIndex index){
    qDebug() << index.row();
    qDebug() << index.column();
    ui->tableUslugi->setCurrentIndex(index);
}

но вот строчка
Код:
ui->tableUslugi->setCurrentIndex(index);
не срабатывает...

Мне нужно чтобы при окончании редактирования фокус вернулся в ячейку


Название: Re: QTableWidget определить что закончилось редактирование!!
Отправлено: iroln от Октябрь 08, 2011, 15:48
По идее сигнал dataChanged высылается моделью уже ПОСЛЕ того, как данные были изменены, то есть предполагается, что они уже были записаны куда-то там, где они хранятся. Этот сигнал используется видами для собственного обновления. Вам надо, как я понял, вывести подтверждение до того, как данные будут сохранены. Это надо делать в модели, а не в виде, потому что одна модель может иметь несколько видов одновременно. Не будете же вы в каждом виде реализовывать проверку вводимых данных.

Вот тут можно почитать:
http://doc.crossplatform.ru/qt/4.7.x/model-view-programming.html


Название: Re: QTableWidget определить что закончилось редактирование!!
Отправлено: NetWorm от Октябрь 08, 2011, 15:54
У меня сделано, что при нажатии на Enter я двигаюсь по ячейкам, но при редактировании ячейки теряется фокус и мне нужно его вернуть на следующую ячейку или остаться на этой же... т.е. чтобы закончилось редактирование и ячейка осталась выделенной