Russian Qt Forum
Июля 04, 2025, 23:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отловить событие окончания редактирование ячейки  (Прочитано 7282 раз)
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:Улыбающийся{ //---  Какое событие надо написать чтоб реагировало на завершение редактирования ячейки

Мне нужно отловить выход из редактирования ячейки!!! Какое событие за это отвечает???
Записан
AnubiSAD
Гость
« Ответ #1 : Октября 06, 2011, 11:09 »

А сигнал типа itemChanged () или cellChanged () не подойдет? Зачем события?
Записан
NetWorm
Гость
« Ответ #2 : Октября 06, 2011, 11:17 »

Где есть такой сигнал я что-то его не вижу!!!
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Октября 06, 2011, 12:46 »

void QTreeWidget::itemChanged ( QTreeWidgetItem * item, int column ) [signal] - этот наверное
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
NetWorm
Гость
« Ответ #4 : Октября 06, 2011, 12:54 »

Блин совсем забыл сказать!!! Изменение не TreeWidget, а TableView
Записан
vadim303
Гость
« Ответ #5 : Октября 06, 2011, 13:07 »

TableView? Значит вы используете схему Model-View ? Если да, то в модели (потомка QAbstractItemModel) есть сигнал dataChanged(). Если нет, то тогда лучше использовать QTableWidget, и вот как раз в нём есть сигналы itemChanged() и cellChanged().

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Октября 06, 2011, 13:08 »

void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal] (как уже указали выше) или void QStandardItemModel::itemChanged ( QStandardItem * item ) [signal] (все зависит от используемой модели).
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
NetWorm
Гость
« Ответ #7 : Октября 06, 2011, 13:21 »

Я использую перехват событий только лишь для того чтобы при нажатии по Ентер переходить на следующую ячейку
Записан
vadim303
Гость
« Ответ #8 : Октября 06, 2011, 14:01 »

для QTableView у меня такой задачи не было, но скорей всего можно тоже обойтись без перехвата событий. Может быть в сторону делегатов надо покопать. Вот для потомка QTableWidget я при создании в ячейке редактора (а это фактически QLineEdit), я получал его адрес и связывал его сигнал returnPressed() со своим слотом перехода к следующей ячейке.
Записан
asvil
Гость
« Ответ #9 : Октября 06, 2011, 17:35 »

QAbstractDelegate::EndEditHint
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.032 секунд. Запросов: 20.