Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Martiro от Декабрь 19, 2007, 10:30



Название: QT3 и MouseMoveEvent
Отправлено: Martiro от Декабрь 19, 2007, 10:30
Проблема в следущем...
Хочу, чтобы при перемещении мыши по QCanvasView, бегали координаты рисунка. Но почему-то при перемещении ничего не работает, а работает только при нажатии левой клавиши мыши. Как сделать так, чтобы координаты считывались сразу, без нажатия?

Код:
/*virtual*/ void QCanvasView::contentsMouseMoveEvent( QMouseEvent *me)
{
   int iX, iY;
   iX = me->x();
   iY = me->y();
   lbCoordX->setText(QString::number(iX));
   lbCoordY->setText(QString::number(iY));

}


Название: Re: QT3 и MouseMoveEvent
Отправлено: ритт от Декабрь 19, 2007, 10:34
сетМоусеТрэкинг(тру) ?
есть в тройке вообще такое? в четвёрке решается так


Название: Re: QT3 и MouseMoveEvent
Отправлено: Martiro от Декабрь 19, 2007, 10:37
В том вся и фигня что setMouseTracking стоит в TRUE.
Вообще, я класс переписываю, и добавляю на форму. И в переписанном классе и на главной форме стоит setMouseTracking(TRUE).


Название: Re: QT3 и MouseMoveEvent
Отправлено: Kainit от Декабрь 19, 2007, 10:48
http://doc.trolltech.com/3.3/qwidget.html#mouseMoveEvent (http://doc.trolltech.com/3.3/qwidget.html#mouseMoveEvent)

If mouse tracking is switched off, mouse move events only occur if a mouse button is pressed while the mouse is being moved. If mouse tracking is switched on, mouse move events occur even if no mouse button is pressed.

setMouseTracking(true); - работает, проверял лично!


Название: Re: QT3 и MouseMoveEvent
Отправлено: Martiro от Декабрь 19, 2007, 10:58
я использую contentsMouseMoveEvent, но это не принципиально (без разницы)...
Если использовать функцию mouseMoveEvent, работает нормально до тех пор, пока в QCanvasView не добавляется рисунок (в качестве background).


Название: Re: QT3 и MouseMoveEvent
Отправлено: Kainit от Декабрь 19, 2007, 14:59
1. код в студию
2. в случае добавления картинки, возможно имеет смысл дальнейшие маус мувы снимать уже с картинки...


Название: Re: QT3 и MouseMoveEvent
Отправлено: Martiro от Декабрь 19, 2007, 15:13
Главная форма:
Цитировать
mainForm::mainForm(QWidget* pwgt/*=0*/, const char* pszName/*=0*/)
                 : QWidget(pwgt, pszName)

{
...
canvas1.resize(1000,1000);
cv1 = new jnCanvasView(&canvas1, this);
...
canvas1.setBackgroundPixmap(img);
canvas1.resize(img.width(), img.height());
canvas1.update();
...
setMouseTracking(TRUE);
...
}


Переписанный класс QCanvasView (jnCanvasView):
Цитировать
jnCanvasView::jnCanvasView ( QCanvas * canvas, QWidget * parent = 0, const char * name = 0, WFlags f = 0 )
                                : QCanvasView(canvas, parent, name)
{
...
lbCoordX = new QLabel (this);
lbCoordY = new QLabel (this);
...
setMouseTracking(TRUE);
...
}

void jnCanvasView::contentsMouseMoveEvent( QMouseEvent *me)
{
   int iX, iY;
   iX = me->x();
   iY = me->y();
   lbCoordX->setText(QString::number(iX));
   lbCoordY->setText(QString::number(iY));
}


А как снимаются маусмувы с картинки?


Название: Re: QT3 и MouseMoveEvent
Отправлено: Kainit от Декабрь 20, 2007, 10:41
Цитировать
А как снимаются маусмувы с картинки?
canvas1.setBackgroundPixmap(img);
Нет, с такой картинки никак :-)

Блин, жутко влом ставить Qt 3.3. А вместо contentsMouseMoveEvent обычный mouseMoveEvent не пробовали? Наверное пробовали...

Я насчёт себя могу сказать что в 4.3 всё нормально и с любыми фоновыми картинками ловится. Может в 3.3 была такая бага?