Russian Qt Forum

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



Название: Запретить кликать за претелами таблицы
Отправлено: Flakes от Ноябрь 23, 2009, 06:40
Если кликнуть не по таблице, а за ее пределами, то выборка сбросится. Как отключить это? Нужно чтоб ничего не сбрасывалось и вообще никак на это не реагировала.

(http://i46.tinypic.com/121tx1v.png)


Название: Re: Запретить кликать за претелами таблицы
Отправлено: uriel от Ноябрь 23, 2009, 08:18
Можно попробовать решить проблему установкой на виджет таблицы фильтра событий с таким вот кодом:
Код
C++ (Qt)
QTableWidgetItem *currentItem = table->temAt(table->viewport()->mapFromGlobal(ev->globalPos()));
if (!currentItem)
return true;


Название: Re: Запретить кликать за претелами таблицы
Отправлено: Flakes от Ноябрь 24, 2009, 05:39
Сделал так:
Код
C++ (Qt)
void MyTableView::mousePressEvent(QMouseEvent *event)
{
QModelIndex index = this->indexAt(this->viewport()->mapFromGlobal(event->globalPos()));
if (!index.isValid()){
return;
} else {
QTableView::mousePressEvent(event);
}
}
 

Метод работает как надо, то есть на неправильном индексе оно идет на return. Но евент все равно срабатывает нормально и селект сбрасывается.


Название: Re: Запретить кликать за претелами таблицы
Отправлено: lit-uriy от Ноябрь 24, 2009, 06:42
может перед return делать event->ignore() ?


Название: Re: Запретить кликать за претелами таблицы
Отправлено: Flakes от Ноябрь 24, 2009, 07:50
может перед return делать event->ignore() ?

Пробовал, не помогает.