crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Перехват MouseButtonDblClick на иконке в QTableWidgetItem/QTreeWidgetItem, Нажатие на иконке в item'e
igor_bogomolov
  опции профиля:
сообщение 15.10.2010, 11:29
Сообщение #1


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Всем привет. Сейчас прослеживается приятная тенденция делиться своими наработками, которые могут оказаться полезными другим. У меня так же накопилось пару полезностей (на мой взгляд). Одну из них только что сделал. Это перехват событий от иконки в item'ах. Выкладываю в корыстных целях - может есть способ проще, не использующий недокументированных функций Qt?

Для этого нам нужно создать собственный делегат на основе QItemDelegate и переопределить метод editorEvent следующим образом
bool TreeWidgetDelegate::editorEvent(QEvent * event, QAbstractItemModel * model,
                       const QStyleOptionViewItem & option, const QModelIndex & index)
{
    if (event->type() != QEvent::MouseButtonDblClick)
          return QItemDelegate::editorEvent(event, model, option, index);

    QPixmap pixmap;
    QRect decorationRect;

    QVariant value = index.data(Qt::DecorationRole);
    if (value.isValid()) {
          pixmap = decoration(option, value);
          decorationRect = QRect(QPoint(0, 0), pixmap.size());

          QRect checkRect;
          Qt::ItemFlags flags = model->flags(index);
          if (flags.testFlag(Qt::ItemIsUserCheckable))
                checkRect = check(option, option.rect, Qt::Checked);

          QRect emptyRect;
          doLayout(option, &checkRect, &decorationRect, &emptyRect, false);

          QMouseEvent *me = static_cast<QMouseEvent*>(event);
          if (me->button() != Qt::LeftButton || decorationRect.contains(me->pos())) {
              qDebug() << "click icon!!!";
          }
          return true;
    }
    return QItemDelegate::editorEvent(event, model, option, index);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 20.10.2010, 14:53
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Добавил в Wiki. (ссылка)

Поправьте если есть способ легче :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 9:54