Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Flakes от Ноябрь 29, 2009, 12:34



Название: QTableView, как определить что едитор запущен?
Отправлено: 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() почему то не вызывается, может я что то не так делаю?



Название: Re: QTableView, как определить что едитор запущен?
Отправлено: spectre71 от Ноябрь 29, 2009, 12:46
Что значит запущен?


Название: Re: QTableView, как определить что едитор запущен?
Отправлено: Flakes от Ноябрь 29, 2009, 13:49
Значит я в данный момент редактирую содержимое ячейки
(http://i47.tinypic.com/122hgmh.png)

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


Название: Re: QTableView, как определить что едитор запущен?
Отправлено: spectre71 от Ноябрь 29, 2009, 14:24
Значит я в данный момент редактирую содержимое ячейки
(http://i47.tinypic.com/122hgmh.png)

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

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

}


Название: Re: QTableView, как определить что едитор запущен?
Отправлено: Flakes от Ноябрь 29, 2009, 14:29
Переопредели:
bool QAbstractItemView::edit ( const QModelIndex & index, EditTrigger trigger, QEvent * event )   [virtual protected]
И отслеживай в ней

А как можно переопределить метод QAbstractItemView, не наследуя весь класс?


Название: Re: QTableView, как определить что едитор запущен?
Отправлено: Flakes от Ноябрь 29, 2009, 15:13
Ничего в QAbstractItemView переопределять не пришлось. Обошелся edit(const QModelIndex &index, QAbstractItemView::EditTrigger trigger, QEvent *event) вместо edit(const QModelIndex &index).

Спасибо!


Название: Re: QTableView, как определить что едитор запущен?
Отправлено: Flakes от Ноябрь 29, 2009, 16:18
Попутный вопрос на эту же тему. А как вручную завершить едитор?

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

Я так понимаю, я могу закрыть его через closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint), только откуда мне взять ссылку на editor?


Название: Re: QTableView, как определить что едитор запущен?
Отправлено: Flakes от Ноябрь 29, 2009, 19:38
Сделал вот так,
Код
C++ (Qt)
QWidget *editor = MyTableView::focusWidget();
MyTableView::closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
 

редактор закрывается, но данные не сабмитятся... ???