Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ [РЕШЕНО] через eventFillter Узнать какой объект создал эвент

Автор: Andrewshkovskii 7.12.2009, 22:38

Необходимо узнать, на каком объекте вызван ивент.
Проще говоря, мне необходимо определить, на pixmap'e ли кликнули мышкой, что бы рисовался path именно на нем, а нигде в другом месте... ?
Я так понимаю, что через проверку sender'а не получиться, т.к это не сигнал,да и адрес в этом вызове всегда будет 0x0 (проверял).
Смотреть, входит ли позиция вызова в пределы нужного объекта?

Автор: SABROG 7.12.2009, 22:48

Кликнуть на pixmap'e невозможно, это не визуальный класс. Тебе нужно переопределять mousePressEvent() и т.п. у того виджета, который показывает твой pixmap.

Автор: Andrewshkovskii 7.12.2009, 22:53

Получается, что если я использую QLabel для отображения Pixmap'а, то надо определять свой виджет, наследуясь от QLabel?...

Автор: SABROG 7.12.2009, 23:08

Цитата(Andrewshkovskii @ 7.12.2009, 22:53) *
Получается, что если я использую QLabel для отображения Pixmap'а, то надо определять свой виджет, наследуясь от QLabel?...

Ага. Но если не хочется, то и installEventFilter() подойдет.

Автор: Andrewshkovskii 7.12.2009, 23:42

Почитал бланшета на эту тему.. Вот что попробовал :
в конструкторе :

installEventFilter(ui->inputSymbolFiled);
//ui->inputSymbolFiled -  QLabel *


И сам фильтер :
bool recognizer::eventFilter(QObject *o, QEvent *e)
{
    if (o == ui->inputSymbolFiled){
        qDebug() << "1";
        return true;
    }else
       qDebug() << "hell";
    return QWidget::eventFilter(o,e);
}

и при клике на текст лейбла, или пиксмап внутри него в консоль ничего не выводиться..в чем ошибка закралась?

Автор: kwisp 7.12.2009, 23:50

Andrewshkovskii,
по моему ты шиворот на выворот написал(могу ошибаться)
ты в рекогнайзер установил фильтр лэйбла. а нужно то наоборот.

Автор: Andrewshkovskii 7.12.2009, 23:52

Ну что бы установить фильтр лейбла - нужно его реализовать самому, отнаследовшись. Я так это понимаю. Да и в книжке последовательность такая же.

надо было вот так вот :

    ui->inputSymbolFiled->installEventFilter(this);

Я понял, про что квисп сказал, извини, что оклеветал!:)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)