2016-01-23 4 views
1

Привет, мне нужно нарисовать прямоугольник над Qlabel, в качестве первого шага я пытаюсь получить события мыши. Используя приведенный ниже код, событие вызывается, но координаты всегда одинаковы, даже если я изменил положение мыши.Координаты мыши Qt на ярлыке

Также мне нужно установить отслеживание мыши только на Qlabel, и он отлично работает, за исключением мыши, функция mouseReleaseEvent получает вызов, когда мышь выйдет за пределы Qlabel.

Также смотрите комментарии в коде ниже,

ImageEditer::ImageEditer(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::ImageEditer) 
{ 
    ui->setupUi(this); 
    ui->label_image->setMouseTracking(true); // need to set the mouse tracking over this label 
} 

void ImageEditer::mouseMoveEvent(QMouseEvent* event) 
{ 
    qDebug() << "Mouse move.." << pos() << "---> " << x() << "," << y(); // these printing same values 
} 

void ImageEditer::mousePressEvent(QMouseEvent* event) 
{ 
    qDebug() << "Mouse press.." << pos() << "---> " << x() << "," << y(); // these printing same values 
} 

// This getting called when release the mouse outside the label_image 
void ImageEditer::mouseReleaseEvent(QMouseEvent *event) 
{ 
    qDebug() << "Mouse release.." << pos() << "---> " << x() << "," << y(); // these printing same values 
} 

ответ

4

Вы печатаете поз(), х ​​(), у() виджета. Просто измените его на event-> pos(), event-> pos(). X(), event-> pos(). Y()

+0

Вы правы, моя глупая ошибка, и есть ли у вас какие-либо идеи о 'mouseReleaseEvent', вызываемом при выпуске мыши вне Qlabel. – Haris

+0

Что я знаю, когда вы нажимаете и удерживаете, виджет станет «мишенью», пока вы его не отпустите. Но чтобы пропустить это, в событии release вы можете просто проверить, не находится ли pos вне геометрии виджета. – yshurik

+0

Хорошо, спасибо, я понимаю. – Haris

Смежные вопросы