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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Управление курсором мыши  (Прочитано 8684 раз)
burunduk
Гость
« : Ноябрь 29, 2005, 13:26 »

Как указать чтобы в виджете курсор мыши позиционировался в определенную координату ? или запретить движение курсора ?
Записан
Sergeich
Гость
« Ответ #1 : Ноябрь 29, 2005, 14:34 »

Юзай QCursor::setPos()
Записан
burunduk
Гость
« Ответ #2 : Ноябрь 29, 2005, 15:02 »

спасибо!
Записан
burunduk
Гость
« Ответ #3 : Ноябрь 29, 2005, 15:19 »

а можно ли запретить движение курсора в одном направлении ?

QCursor::setPos() использую в mouseMoveEvent() и прыганий курсора избежать не могу :-(
Записан
zlatko
Гость
« Ответ #4 : Ноябрь 29, 2005, 16:25 »

на счет прыганий курсора покажы код mouseMoveEvent()
Записан
burunduk
Гость
« Ответ #5 : Ноябрь 29, 2005, 17:32 »

Код:

#include <QtGui>

QTextStream cout(stdout);

class MyWidget : public QWidget {
  void mouseMoveEvent(QMouseEvent* e) {
    cout << "move pos=" << e->pos().x() << "," << e->pos().y() << endl;
    if(e->pos().y() > 200) {
      QCursor::setPos(mapToGlobal(QPoint(e->pos().x(), 200)));
    }
  }
};

int main(int argc, char* argv[]) {
  QApplication app(argc, argv);
  MyWidget w;
  w.setMouseTracking(true);
  w.show();
  return app.exec();
}
Записан
zlatko
Гость
« Ответ #6 : Ноябрь 29, 2005, 18:29 »

попробуй так

Код:

 void mouseMoveEvent(QMouseEvent* e)
{
    QPoint pt = mapToGlobal(e->pos());
    if(pt.y() > 200)
      QCursor::setPos(pt.x(), 200);
}
Записан
burunduk
Гость
« Ответ #7 : Ноябрь 30, 2005, 10:35 »

пробовал.... эффект тот же
а что собственно должно поменяться ?  
теперь координата ограничения просто другая...
Записан
ElderOrb
Гость
« Ответ #8 : Ноябрь 30, 2005, 11:40 »

Попробуй вместо
Код:
 
if(e->pos().y() > 200) {
      QCursor::setPos(mapToGlobal(QPoint(e->pos().x(), 200)));
    }


сделать
Код:

if(e->globalPos().y() > mapToGlobal(QPoint(0, 200)).y()) {
      QCursor::setPos(e->globalX(), 200);
}
Записан
burunduk
Гость
« Ответ #9 : Ноябрь 30, 2005, 11:52 »

то же самое

нада не исправлять координату курсора после движения, а именно не давать ему подвигаться дальше
Записан
Dendy
Гость
« Ответ #10 : Ноябрь 30, 2005, 14:36 »

Мабуть ніяк  Грустный   А навіщо це треба? Можемо пошукати альтернативи  :wink:
Записан
burunduk
Гость
« Ответ #11 : Ноябрь 30, 2005, 15:18 »

зачем ? хочу ограничить минимальные размеры редактируемого прямоугольника да так, чтобы когда его размер дальше менять нельзя курсор мышки соотв. чтобы не уезжал дальше
Записан
Dendy
Гость
« Ответ #12 : Ноябрь 30, 2005, 15:50 »

Веселый  Дик! Так це вирішується елементарно:

Код:
void mouseMoveEvent( QMouseEvent * e )
{
  QPoint mypos = qBound( myrect.topLeft(), e->pos(), myrect.bottomRight() );
  // і далі працюєш так, ніби курсор миші знаходиться у [b]mypos[/b]
}


Якщо немає qBound для QPoint, то ось воно:

Код:
QPoint qBound( const QPoint & min, const QPoint & val, const QPoint & max )
{
  return QPoint( qBound( min.x(), val.x(), max.x() ), qBound( min.y(), val.y(), max.y() ) );
}


Доречі, схоже працюють ScrollBar - коли тягнеш та відводиш мишу від повзунка від все одно тягнеться  :wink:
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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