Russian Qt Forum
Сентябрь 30, 2024, 16:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView, как определить что едитор запущен?  (Прочитано 4124 раз)
Flakes
Гость
« : Ноябрь 29, 2009, 12:34 »

Нужно определить, запущен ли в данный момент редактор или нет. Решил сделать через флаг, устанавливая его в момент когда редактор запущен и сбрасывая, когда завершается. Я в своем классе определил два слота:
Код
C++ (Qt)
class MyTableView : public QTableView
{
 
...
 
public slots:
void MyTableView::edit(const QModelIndex &index);
void MyTableView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint);
};
 

С closeEditor() все ок, а edit() почему то не вызывается, может я что то не так делаю?

Записан
spectre71
Гость
« Ответ #1 : Ноябрь 29, 2009, 12:46 »

Что значит запущен?
Записан
Flakes
Гость
« Ответ #2 : Ноябрь 29, 2009, 13:49 »

Значит я в данный момент редактирую содержимое ячейки


Запускается по дабл-клику по дефолту.
Записан
spectre71
Гость
« Ответ #3 : Ноябрь 29, 2009, 14:24 »

Значит я в данный момент редактирую содержимое ячейки


Запускается по дабл-клику по дефолту.

void MyTableView::edit(const QModelIndex &index); не является виртуальным! Вызавается  edit базового класса (QAbstractItemView)

Переопредели:
bool QAbstractItemView::edit ( const QModelIndex & index, EditTrigger trigger, QEvent * event )   [virtual protected]
И отслеживай в ней
Не забyдь только вызваь ее у базоаого класса!

bool MyTableView::edit ( const QModelIndex & index, EditTrigger trigger, QEvent * event )  {
  QAbstractItemView::edit (index, trigger, event) ;

// Do something

}
Записан
Flakes
Гость
« Ответ #4 : Ноябрь 29, 2009, 14:29 »

Переопредели:
bool QAbstractItemView::edit ( const QModelIndex & index, EditTrigger trigger, QEvent * event )   [virtual protected]
И отслеживай в ней

А как можно переопределить метод QAbstractItemView, не наследуя весь класс?
Записан
Flakes
Гость
« Ответ #5 : Ноябрь 29, 2009, 15:13 »

Ничего в QAbstractItemView переопределять не пришлось. Обошелся edit(const QModelIndex &index, QAbstractItemView::EditTrigger trigger, QEvent *event) вместо edit(const QModelIndex &index).

Спасибо!
Записан
Flakes
Гость
« Ответ #6 : Ноябрь 29, 2009, 16:18 »

Попутный вопрос на эту же тему. А как вручную завершить едитор?

В описании edit() сказато:
Цитировать
Starts editing the item at index, creating an editor if necessary

Я так понимаю, я могу закрыть его через closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint), только откуда мне взять ссылку на editor?
Записан
Flakes
Гость
« Ответ #7 : Ноябрь 29, 2009, 19:38 »

Сделал вот так,
Код
C++ (Qt)
QWidget *editor = MyTableView::focusWidget();
MyTableView::closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
 

редактор закрывается, но данные не сабмитятся... Непонимающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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