Qml 如何使“一体式”工作?

Qml 如何使“一体式”工作?,qml,Qml,我有一个名为Polygon的自定义QdeCrativeItem子类。 我在其中添加了一个鼠标earea,但onenterned或onPressed不起作用,或者我是否预期会发生错误的事情?我可以在窗口上看到我的多边形,但控制台上没有任何文字在按下或按下 以下是QML文件: import MyTypes 1.0 import QtQuick 1.0 import Qt 4.7 Item { id: container width: 350; height: 250 P

我有一个名为Polygon的自定义QdeCrativeItem子类。 我在其中添加了一个鼠标earea,但onenterned或onPressed不起作用,或者我是否预期会发生错误的事情?我可以在窗口上看到我的多边形,但控制台上没有任何文字在按下或按下

以下是QML文件:

import MyTypes 1.0
import QtQuick 1.0
import Qt 4.7

Item {
    id: container
    width: 350; height: 250

     Polygon {
         id: aPolygon

         width: 20; height: 20
         name: "A simple polygon"
         color: "blue"
         vertices:[

         Point{x:20.0; y:40.0},
         Point{x:40.0; y:40.0},
         Point{x:40.0; y:20.0},
         Point{x:20.0; y:20.0}
         ]

         MouseArea{
             anchors.fill: parent
             drag.target: aPolygon
             drag.axis: Drag.XandYAxis
             drag.minimumX: 0
             drag.maximumX: container.width - parent.width
             drag.minimumY: 0
             drag.maximumY: container.height - parent.width
             onPressed:console.log("==============   ==onPressed")

         }


     }

     Polygon {
         id: bPolygon
         //anchors.centerIn: parent
         width: 20; height: 20
         name: "A simple polygon"
         color: "blue"
         vertices:[

         Point{x:60.0; y:80.0},
         Point{x:80.0; y:80.0},
         Point{x:80.0; y:60.0},
         Point{x:60.0; y:60.0}
         ]

         MouseArea{
             //hoverEnabled: false
             enabled: visible
             hoverEnabled: visible
             anchors.fill: parent
             acceptedButtons: Qt.LeftButton | Qt.RightButton
             onEntered: {
                 console.log("==============   ==onEntered")

             }
         }


     }
}
谢谢你的建议

编辑:

多边形.cpp

#include "polygon.h"
#include "point.h"
#include <QPainter>
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <QGraphicsSceneDragDropEvent>
#include <QFocusEvent>
#include "DeclarativeDragDropEvent.h"

using namespace std;
using namespace Qt;

Polygon::Polygon(QDeclarativeItem *parent)
    : QDeclarativeItem(parent)
{
    // need to disable this flag to draw inside a QDeclarativeItem
    //setFlag(QDeclarativeItem::ItemHasNoContents, false);
    setFlags(ItemIsSelectable|ItemIsMovable|ItemIsFocusable);
    setAcceptDrops(true);
    setAcceptedMouseButtons( Qt::LeftButton );



}
/*void Polygon::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    forceActiveFocus();
}

void Polygon::focusOutEvent(QFocusEvent *event)
{
    cout<<"focusout"<<endl;
    this->setSelected( false );
}*/


/*QVariant Polygon::itemChange(GraphicsItemChange change, const QVariant &value)
{

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


/*void Polygon::focusInEvent ( QFocusEvent * event ){
    cout<<"focusin"<<endl;
}*/

QRectF Polygon::boundingRect() const{

    QVector<QPointF> vPnt=listToVector(m_vertices);
    return QPolygonF(vPnt).boundingRect();

}

QPainterPath Polygon::shape () const
{
    QPainterPath path;
    QVector<QPointF> vPnt=listToVector(m_vertices);
    path.addPolygon(QPolygonF(vPnt));
return path;
}

QString Polygon::name() const
{
    return m_name;
}

void Polygon::setName(const QString &name)
{
    m_name = name;
}

QColor Polygon::color() const
{
    return m_color;
}

void Polygon::setColor(const QColor &color)
{
    m_color = color;
}

void Polygon::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
    QPen pen(m_color, 2);
    painter->setPen(pen);
    painter->setRenderHints(QPainter::Antialiasing, true);


QVector<QPointF> vPnt=listToVector(m_vertices);
    painter->setBrush(QBrush(m_color,Qt::SolidPattern));
    painter-> drawPolygon(QPolygonF(vPnt),Qt::OddEvenFill);



}

QVector<QPointF> Polygon:: listToVector(QList<Point *> lpnt) const{
    QVector<QPointF> vPnt;
        for(int i=0;i<lpnt.length();i++){
            vPnt.append(QPointF(lpnt.at(i)->x(),lpnt.at(i)->y()));

        }
        return vPnt;
}

QDeclarativeListProperty<Point> Polygon::vertices()
 {
     return QDeclarativeListProperty<Point>(this, 0, &Polygon::append_vertex);
 }

 void Polygon::append_vertex(QDeclarativeListProperty<Point> *list, Point *vertex)
 {
     Polygon *polygon = qobject_cast<Polygon *>(list->object);
     if (polygon) {
         vertex->setParentItem(polygon);
         polygon->m_vertices.append(vertex);
     }
 }

我认为应该将hoverEnabled设置为true,还是有意将其设置为visible?visible是一个布尔属性,对于MouseArea可能为false


启用时也是如此:可见

多边形是否具有默认属性集?如果是,其目标的大小是否正确?感谢@Dotti的评论,但我不明白默认属性集是什么,我在哪里设置目标的大小,多边形的目标是什么?谢谢。如果你能把多边形类的源代码放在这里,可能会有帮助。我添加了多边形。cpp谢谢你的时间。对不起,我帮不了你,MouseAreas对我来说似乎没有任何问题
MouseArea {
    hoverEnabled: true
}