Russian Qt Forum
Ноябрь 25, 2024, 05:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT3 и MouseMoveEvent  (Прочитано 6223 раз)
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));

}
Записан
ритт
Гость
« Ответ #1 : Декабрь 19, 2007, 10:34 »

сетМоусеТрэкинг(тру) ?
есть в тройке вообще такое? в четвёрке решается так
Записан
Martiro
Гость
« Ответ #2 : Декабрь 19, 2007, 10:37 »

В том вся и фигня что setMouseTracking стоит в TRUE.
Вообще, я класс переписываю, и добавляю на форму. И в переписанном классе и на главной форме стоит setMouseTracking(TRUE).
Записан
Kainit
Гость
« Ответ #3 : Декабрь 19, 2007, 10:48 »

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); - работает, проверял лично!
Записан
Martiro
Гость
« Ответ #4 : Декабрь 19, 2007, 10:58 »

я использую contentsMouseMoveEvent, но это не принципиально (без разницы)...
Если использовать функцию mouseMoveEvent, работает нормально до тех пор, пока в QCanvasView не добавляется рисунок (в качестве background).
Записан
Kainit
Гость
« Ответ #5 : Декабрь 19, 2007, 14:59 »

1. код в студию
2. в случае добавления картинки, возможно имеет смысл дальнейшие маус мувы снимать уже с картинки...
Записан
Martiro
Гость
« Ответ #6 : Декабрь 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));
}


А как снимаются маусмувы с картинки?
« Последнее редактирование: Декабрь 19, 2007, 15:15 от Martiro » Записан
Kainit
Гость
« Ответ #7 : Декабрь 20, 2007, 10:41 »

Цитировать
А как снимаются маусмувы с картинки?
canvas1.setBackgroundPixmap(img);
Нет, с такой картинки никак :-)

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

Я насчёт себя могу сказать что в 4.3 всё нормально и с любыми фоновыми картинками ловится. Может в 3.3 была такая бага?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 21.