繁体   English   中英

x11限制鼠标移动

[英]x11 limit mouse movements

我尝试将鼠标光标移动锁定到屏幕的左半部分。 我有以下屏幕设置:

左侧是尺寸为1120x1080的Qt窗口,右侧是尺寸为800x1080的GL窗口。

我在Ubuntu 12.10下使用Openbox窗口管理器。 窗口布局保持固定。

我需要限制鼠标移动到Qt窗口。

要使鼠标停留在窗口中,请启用鼠标移动:

setMouseTracking(true);

并覆盖void QWidget::mouseMovement( QMouseEvent * event )

void TheWindow::mouseMoveEvent ( QMouseEvent * event )
{
    // get window size without frame
    QRect s = geometry();

    // get current cursor position
    int x = event->globalX();
    int y = event->globalY();

    bool reset = false;

    // Check cursor position relative to window
    if (event->x() < 0) 
    {
        x -= event->x();
        reset = true;
    }
    else if (event->x() >= s.width())
    {
       x += s.width() - event->x() - 1;
       reset = true;
    }

    if (event->y() < 0)
    {
        y -= event->y();
        reset = true; 
    }
    else if (event->y() >= s.height())
    {
        y += s.height() - event->y() - 1;
        reset = true;
    }

    // if reset needed move cursor  
    if (reset) QCursor::setPos(x,y);

}

这涉及QGraphicsItem::itemChange() 如果您有一个项目要限制到某个区域,则重新实现该项目的itemChange()并监视QGraphicsItem::ItemPositionHasChanged更改以查看项目是否要放置在您感兴趣的区域之外并通过返回位置来防止从那个区域内部。 例如:

QVariant QGraphicsItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
    switch (change) {
    case ItemPositionHasChanged:
        if(x() < -200 || y() < -200 || x() > 200 || y() > 200)
            setPos(0, 0);
        graph->itemMoved();
        break;
    default:
        break;
    };

    return QGraphicsItem::itemChange(change, value);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM