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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView, обработка QEvent::StatusTip  (Прочитано 3618 раз)
TaIRou
Гость
« : Октябрь 18, 2011, 21:04 »

Доброго времени суток, ребят.
Вот, например, мы используем QStandardItem, а точнее его метод
Код:
void QStandardItem::setStatusTip ( const QString & statusTip )
Вопрос, каким образом view реагирует на данные Qt::StatusTipRole, которые находятся в модели.
Делал фильтр событий для QTableView
Код:
bool
Myfilter::eventFilter(QObject *watched, QEvent *event)
{
    if (event->type() == QEvent::StatusTip)
        qDebug() << "Myfilter::eventFilter" << event->type();
    if (event->type() == QEvent::ToolTip)
        qDebug() << "Myfilter::eventFilter" << event->type();

    return false;
}
Но ему пофиг на то, что происходит с QTableView. Как будто и событий никаких она не обрабатывает. Может она их сама генерирует поэтому и фильтр ничег не ловит?
Мне необходимо каким-нибудь волшебным образом, отлавливать события связанные со StatusTip item'ов, если таковые вообще есть или придется наследоваться от вьюшки и генерировать события самому?
Записан
twp
Гость
« Ответ #1 : Октябрь 20, 2011, 15:20 »

а что будет, если повесить фильтр на вьюпорт?
Записан
TaIRou
Гость
« Ответ #2 : Октябрь 20, 2011, 19:03 »

а что будет, если повесить фильтр на вьюпорт?

спасибо за ответ, но Qt-шники и так свой фильтр на вьюпорт повесили и через его eventFilter(QEvent *) виртуальную viewportEvent(QEvent *) вызывают.
Они сами генерят событие StatusTip, только вот в каком случае, я не стал разбираться, голову сломаю)
Может для viewport'a необходимо setMouseTracking(true) сделать...

Код:
void QAbstractItemView::mouseMoveEvent(QMouseEvent *event)
...
QPoint bottomRight = event->pos();
...
QModelIndex index = indexAt(bottomRight);
....
if (d->enteredIndex != index) {
        // signal handlers may change the model
        QPersistentModelIndex persistent = index;
        if (persistent.isValid()) {
            emit entered(persistent);
#ifndef QT_NO_STATUSTIP
            QString statustip = d->model->data(persistent, Qt::StatusTipRole).toString();
            if (parent() && !statustip.isEmpty()) {
                QStatusTipEvent tip(statustip);
                QApplication::sendEvent(parent(), &tip);
            }
#endif
        } else {
#ifndef QT_NO_STATUSTIP
            if (parent()) {
                QString emptyString;
                QStatusTipEvent tip(emptyString);
                QApplication::sendEvent(parent(), &tip);
            }
#endif
            emit viewportEntered();
        }

Я думал, что логика такая же как и у обычного QWidget'a: при входе в границы ячейки и выходе из них генерится событие QStatusTip, но вроде все не так... Если у кого есть желание загляните в исходники QAbstractItemView, может у вас будут свежие мысли)))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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