LINUX.ORG.RU

QWidget::mouseMoveEvent. Помогите.


0

0

void Widget::mouseMoveEvent( QMouseEvent *e )
{
QString label;
label.sprintf( "x=%d, y=%d",
e->pos().x()-2, e->pos().y()-23);
statusbar->showMessage(label);
}

Вопрос. Как перехватить движения мышы без нажатия кнопок на оной (хочу чтобы позиция курсора отображалась в statusbar)?

Где грабли?

Читал про QWidget::setMouseTracking ( bool enable ), чето так и не вкурил ,на что оно влияет. Что true, что false по барабану.

Re: QWidget::mouseMoveEvent. Помогите.

Без setMouseTracking(true) виджет будет воспринимать события о перемещении мыши, только если нажата кнопка.

LestorN ()

Re: QWidget::mouseMoveEvent. Помогите.

Я бы начал с того, что проверил вызывается void Widget::mouseMoveEvent( QMouseEvent *e ) вообще или нет... Вставь какое-нить отладочное сообщение на консоль и посмотри на результат. Потом раскажешь - будем думать.

Sectoid ★★★★★ ()
Ответ на: Re: QWidget::mouseMoveEvent. Помогите. от Sectoid

Re: QWidget::mouseMoveEvent. Помогите.

Короче плюнул я на QMouseEvent с высокой горки так как при перекрытии дочерним окном оно не работает.
И сделал так.
Widget::Widget(...)
{
//бла...
//бла...
//....
QTimer* MouseTimer=new QTimer;
connect(MouseTimer,SIGNAL(timeout()),SLOT(mouseMove()));
MouseTimer->start(10);

}

void Widget::mouseMove()
{
QPoint currentPos=mapFromGlobal (QCursor::pos());
QPoint widgetMinPos=QPoint(x()-1,y()-1);
QPoint widgetMaxPos=QPoint(width()+1,height()+1);
static QPoint lastPos;
if (lastPos!=currentPos) {
if (currentPos.x()>widgetMinPos.x() && currentPos.x()<widgetMaxPos.x()) lastPos.setX(currentPos.x());
if (currentPos.y()>widgetMinPos.y() && currentPos.y()<widgetMaxPos.y()) lastPos.setY(currentPos.y());
statusbar->showMessage(QString("x=%1, y=%2").arg(lastPos.x()).arg(lastPos.y()));
}
}

Spicinpv ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.