2

我在 QML 项目 (Qt 4.8) 中使用了 QwtPlot (Qwt 6.0.1) 。我通过 QDeclarativeItem 包装它

GraphWidgetQML::GraphWidgetQML(QDeclarativeItem *parent):QDeclarativeItem(parent)
{
    _GraphArea = new GraphWidget; //child of QwtPlot without event handlers overrides
    QGraphicsProxyWidget *_wiget = new QGraphicsProxyWidget(this);    
    _wiget->setWidget(_GraphArea);
    _wiget->setFlag(QGraphicsItem::ItemIsFocusable,true);
    this->setClip(true);
}

并通过代码插入 QML

qmlRegisterType<GraphWidgetQML> ("GraphWidget",1,0,"GraphWidget"); //registration type

和 QML

    GraphWidget {
        id: drawer

        objectName: "drawer"

        anchors.top: parent.top
        anchors.bottom: parent.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        //
        anchors.topMargin: 5
        anchors.bottomMargin: 5
        anchors.leftMargin: 5
        anchors.rightMargin: 5
    }

但是,鼠标事件将无法正常工作。例如,当我想绘制一个缩放矩形时,当我释放鼠标按钮时,它不会缩放,直到按下回车键。右键根本不起作用。

如何进行适当的活动提供?

4

1 回答 1

0

在研究这个问题时,我得到了一般的印象QDeclarativeItem- 继承的QGraphicsItem鼠标事件与“正常”事件的行为不太一样QWidget。很难在没有进一步测试的情况下具体/确定,但我有一个想法(来自 QtQuick 和 QML 之前的 Qt 的遥远记忆),对于QWidget鼠标移动事件,你会得到一个mouseMoveEvent没有buttons()按下的终止,而在QGraphicsItem唯一的通知中你会获取鼠标移动完成是一个mouseReleaseEvent.

GraphWidget如果您的组件依赖于所有按钮都打开但没有得到一个按钮,这似乎可以解释您观察到的行为mouseMoveEvent......但我不知道如何使用这些信息来解决问题抱歉。

于 2013-06-16T09:36:57.903 回答