LINUX.ORG.RU

обработка событий мыши в QWidget(QWT) встроенном в QML Qt4

 ,


0

2

Привет, я использую QwtPlot (наследник QWidget) (Qwt 6.0.1) в QML (Qt 4.8) . я обернул 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
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
        }
А мышь корректно не работает (правый клик не работает, зум (нажал, растянул прямоугольник, отпустил) тоже, рамка прилипает к курсору пока не нажмешь enter.

Кто-нибудь делал подобное?

С QWT ни разу не работал; предполагаю, что оно работает на Graphics Framework, поэтому стоит присмотреться к QGraphicsItem: setAcceptHoverEvents(), setAcceptedMouseButtons(), возможно QWidget: setMouseTracking() или QGraphicsView: setInteractive()
В любом случаю, рекомендую перейти на Qt5. Бета вполне стабильна, да и QtQuick 2.0 содержит много новшеств по сравнению с 1.1

vladimirsmirnov9
()
Ответ на: комментарий от vladimirsmirnov9

Да, я про 5 думал, но как-то боязно на бете что-то рабочее делать, да и инструмета для отрисовки графиков на QML я не видел, а с QWidget (QwtPlot на нем основан) та-же беда будет.

Пс. пробовал предложенные методы - не помогает.

llCorvinuSll
() автор топика
Ответ на: комментарий от llCorvinuSll

Проблема в том, что если вставить setAcceptedMouseButtons(Qt::RightButton | Qt::RightButton) то становится невозможным растяжение рамки, тоесть он принимает ивент на нажатие, потом не отслеживает если курсор перемещается

возможно причина в этом (qgraphicsscene.cpp):

void QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    Q_D(QGraphicsScene);
    if (d->mouseGrabberItems.isEmpty()) {
        if (mouseEvent->buttons())
            return;
        QGraphicsSceneHoverEvent hover;
        _q_hoverFromMouseEvent(&hover, mouseEvent);
        mouseEvent->setAccepted(d->dispatchHoverEvent(&hover));
        return;
    }

    // Forward the event to the mouse grabber
    d->sendMouseEvent(mouseEvent);
    mouseEvent->accept();
}
llCorvinuSll
() автор топика
Ответ на: комментарий от llCorvinuSll

да и инструмета для отрисовки графиков на QML я не видел

У Digia кстати есть такая штука, как Qt Commercial Charts. С QML обвязкой.

Amp ★★★
()
Ответ на: комментарий от llCorvinuSll

я ее видел (: Но... Commercial ...@#!@##@#$%

Хорошие и красивые чарты почти всегда стоят денег, увы (впрочем не берусь утверждать, что у digia они именно такие, но на первый взгляд ничего).

Amp ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.