Russian Qt Forum

Qt => Общие вопросы => Тема начата: burunduk от Ноябрь 29, 2005, 13:26



Название: Управление курсором мыши
Отправлено: burunduk от Ноябрь 29, 2005, 13:26
Как указать чтобы в виджете курсор мыши позиционировался в определенную координату ? или запретить движение курсора ?


Название: Управление курсором мыши
Отправлено: Sergeich от Ноябрь 29, 2005, 14:34
Юзай QCursor::setPos()


Название: Управление курсором мыши
Отправлено: burunduk от Ноябрь 29, 2005, 15:02
спасибо!


Название: Управление курсором мыши
Отправлено: burunduk от Ноябрь 29, 2005, 15:19
а можно ли запретить движение курсора в одном направлении ?

QCursor::setPos() использую в mouseMoveEvent() и прыганий курсора избежать не могу :-(


Название: Управление курсором мыши
Отправлено: zlatko от Ноябрь 29, 2005, 16:25
на счет прыганий курсора покажы код mouseMoveEvent()


Название: Управление курсором мыши
Отправлено: burunduk от Ноябрь 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 от Ноябрь 29, 2005, 18:29
попробуй так

Код:

 void mouseMoveEvent(QMouseEvent* e)
{
    QPoint pt = mapToGlobal(e->pos());
    if(pt.y() > 200)
      QCursor::setPos(pt.x(), 200);
}


Название: Управление курсором мыши
Отправлено: burunduk от Ноябрь 30, 2005, 10:35
пробовал.... эффект тот же
а что собственно должно поменяться ?  
теперь координата ограничения просто другая...


Название: Управление курсором мыши
Отправлено: ElderOrb от Ноябрь 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 от Ноябрь 30, 2005, 11:52
то же самое

нада не исправлять координату курсора после движения, а именно не давать ему подвигаться дальше


Название: Управление курсором мыши
Отправлено: Dendy от Ноябрь 30, 2005, 14:36
Мабуть ніяк  :(   А навіщо це треба? Можемо пошукати альтернативи  :wink:


Название: Управление курсором мыши
Отправлено: burunduk от Ноябрь 30, 2005, 15:18
зачем ? хочу ограничить минимальные размеры редактируемого прямоугольника да так, чтобы когда его размер дальше менять нельзя курсор мышки соотв. чтобы не уезжал дальше


Название: Управление курсором мыши
Отправлено: Dendy от Ноябрь 30, 2005, 15:50
:D  Дик! Так це вирішується елементарно:

Код:
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: