Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: NetWorm от Октября 06, 2011, 10:32



Название: Отловить событие окончания редактирование ячейки
Отправлено: NetWorm от Октября 06, 2011, 10:32
Есть код!

Код:
bool frmUslugi::eventFilter(QObject *obj, QEvent *event){

    if (event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        // Обработка нажатия enter или return
        if (obj->objectName() == "treeWidget") {
            if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
                updater(ui->treeWidget->currentItem(),ui->treeWidget->currentColumn(),obj);

            if (keyEvent->key() == Qt::Key_Insert)
                on_add_gr_clicked();
        }
        if (obj->objectName() == "tableUslugi") {
            if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return){

                if(ui->tableUslugi->model() != 0)
                    updater(ui->tableUslugi->currentIndex(),ui->tableUslugi->model()->rowCount(),obj);
            }

            if (keyEvent->key() == Qt::Key_Insert)
                if(ui->tableUslugi->model() != 0)
                    on_add_usluga_clicked();
        }
    }

    if (event->type() == QEvent::){ //---  Какое событие надо написать чтоб реагировало на завершение редактирования ячейки
        qDebug() << event->type();
//        if(ui->tableUslugi->model() != 0)
//            updater(ui->tableUslugi->currentIndex(),ui->tableUslugi->model()->rowCount(),obj);
    }



   return QWidget::eventFilter(obj , event);

}

if (event->type() == QEvent::){ //---  Какое событие надо написать чтоб реагировало на завершение редактирования ячейки

Мне нужно отловить выход из редактирования ячейки!!! Какое событие за это отвечает???


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: AnubiSAD от Октября 06, 2011, 11:09
А сигнал типа itemChanged () или cellChanged () не подойдет? Зачем события?


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: NetWorm от Октября 06, 2011, 11:17
Где есть такой сигнал я что-то его не вижу!!!


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: kambala от Октября 06, 2011, 12:46
void QTreeWidget::itemChanged ( QTreeWidgetItem * item, int column ) [signal] - этот наверное


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: NetWorm от Октября 06, 2011, 12:54
Блин совсем забыл сказать!!! Изменение не TreeWidget, а TableView


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: vadim303 от Октября 06, 2011, 13:07
TableView? Значит вы используете схему Model-View ? Если да, то в модели (потомка QAbstractItemModel) есть сигнал dataChanged(). Если нет, то тогда лучше использовать QTableWidget, и вот как раз в нём есть сигналы itemChanged() и cellChanged().

Вообще использовать перехват событий в Qt не хорошо. Qt построен на модели сигнал-слот, а не на событиях как в фреймворках типа MFC. И если вам часто приходится использовать перехват событий то скорей всего вы что-то недопонимаете в архитектуре классов Qt...


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: kambala от Октября 06, 2011, 13:08
void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal] (как уже указали выше) или void QStandardItemModel::itemChanged ( QStandardItem * item ) [signal] (все зависит от используемой модели).


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: NetWorm от Октября 06, 2011, 13:21
Я использую перехват событий только лишь для того чтобы при нажатии по Ентер переходить на следующую ячейку


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: vadim303 от Октября 06, 2011, 14:01
для QTableView у меня такой задачи не было, но скорей всего можно тоже обойтись без перехвата событий. Может быть в сторону делегатов надо покопать. Вот для потомка QTableWidget я при создании в ячейке редактора (а это фактически QLineEdit), я получал его адрес и связывал его сигнал returnPressed() со своим слотом перехода к следующей ячейке.


Название: Re: Отловить событие окончания редактирование ячейки
Отправлено: asvil от Октября 06, 2011, 17:35
QAbstractDelegate::EndEditHint