子窗口小部件上的MouseDrag

时间:2014-11-28 09:36:22

标签: qt

我正在关注this instructions以获取子事件。我的目的是通过按住Ctrl键来向上/向下拖动鼠标来改变QSpinBox的值(就像在GIMP中一样)。

然而,虽然这适用于窗口,但QSpinBox会忽略拖动并只选择内部的内容。

我已将eventfilter安装到所有子节目中:

eventFilter(QObject *obj, QEvent *event)
{
    switch(event->type())
    {
        case QEvent::ChildAdded:
        {
            QChildEvent* ce = static_cast<QChildEvent*>(event);
            // Install the filter to each new child object created
            ce->child()->installEventFilter(this);
            break;
        }
        case QEvent::ChildRemoved:
        {
            QChildEvent* ce = static_cast<QChildEvent*>(event);
            // Remove the the filter from each new child object removed
            ce->child()->removeEventFilter(this);
            break;
        }
        case QEvent::MouseButtonPress:
        {
            QMouseEvent* me = static_cast<QMouseEvent*>(event);
        qDebug() << QString::number(me->pos().x());
        qDebug() << QString::number(me->pos().y());
            return true;
        }
        case QEvent::MouseButtonRelease:
        {
            QMouseEvent* me = static_cast<QMouseEvent*>(event);
        qDebug() << QString::number(me->pos().x());
        qDebug() << QString::number(me->pos().y());
            return true;
        }
        case QEvent::MouseMove:
        {
            QMouseEvent* me = static_cast<QMouseEvent*>(event);
        qDebug() << QString::number(me->pos().x());
        qDebug() << QString::number(me->pos().y());
            return true;
        }
    }

    return QWidget::eventFilter(obj, event);
}

并在构造函数中使用:

setMouseTracking(true);
installEventFilter(this);

如何完全让QSpinBox忽略选择?

0 个答案:

没有答案