Russian Qt Forum

Qt => Общие вопросы => Тема начата: Anarion от Май 25, 2010, 06:02



Название: Не работает dragLeaveEvent
Отправлено: Anarion от Май 25, 2010, 06:02
Доброго всем времени суток. Возникла проблема неопределенного характера при реализации перетаскивания.
Собственно вся программа (сокращена для наглядности).

Код:
#include <QtGui>
#include <QtCore>

class Label : public QLabel {
private:

protected:
    virtual void dragEnterEvent(QDragEnterEvent *de)
    {
      setText("dragEntedEvent");
    }

    virtual void dragLeaveEvent(QDragEnterEvent* de)
    {
      setText("dragLeaveEvent");
    }

public:
    Label(QWidget* pwgt = 0)
        : QLabel(pwgt)
    {
      setAcceptDrops(true);
    }
};

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    Label *lbl = new Label();
    lbl->resize(200, 200);
    lbl->show();

    return app.exec();
}
Если кратко, то изображается обычный QLabel. Если взять файл или выделенный текст и перетащить, не отпуская, на данный виджет, то на нем отобразится надпись "dragEntedEvent", что вполне естественно. Но вот когда увожу "зажатые" данные из поля виджета событие dragLeaveEvent не срабатывает. В частности такой вывод делаю потому, что нет надписи "dragLeaveEvent". Может, конечно, я неправильно понимаю смысл этого события (dragLeaveEvent). Я считал, что оно должно возникать в тот момент, когда курсор мыши с "зажатыми" данными выходит за границу виджета.

Qt 4.6.2, Win XP SP3.

Подскажите пожалуйста, что делаю не так? Просто очень хотелось бы поймать именно этот момент. Заранее благодарен.


Название: Re: Не работает dragLeaveEvent
Отправлено: ритт от Май 25, 2010, 06:13
намёк (типа, тонкий):
void QWidget::dragEnterEvent ( QDragEnterEvent * event )   [virtual protected]
void QWidget::dragLeaveEvent ( QDragLeaveEvent * event )   [virtual protected]


Название: Re: Не работает dragLeaveEvent
Отправлено: Anarion от Май 25, 2010, 06:52
Спасибо... даже стыдно стало как-то... Это все копипаст виноват  ;D