qGraphicsScene 및 사용자 지정 qGraphicsItem을 사용자 정의하여 구현했지만 itemAt 함수는 값을 반환하지 않습니다. 물론 항목을 클릭하고있는 것이 확실합니다.item qGraphicsItem을 사용자 지정하지 않음
void VScene::addModule(QString modName, QPointF dropPos)
{
VModule *module = new VModule();
addItem(module);
// the QPointF value comes from an event in mainWindow, the coordinate is mapped to my scene.
module->setPos(dropPos);
}
을 ... 그리고 여기에 내가 작성한 사용자 정의 qGraphicsItem은 다음과 같습니다
void VScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
if ((vMouseClick) && (event->pos() == vLastPoint)) {
QGraphicsItem *mod = itemAt(event->pos(), QTransform());
if (mod) { // Never returns true
// ...
}
}
}
는 명확하게하기 위해, 모듈은 다음 코드에 추가됩니다.
VModule.h :
class VModule : public QObject, public QGraphicsItem
{
public:
explicit VModule();
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private:
qreal w;
qreal h;
int xAddr;
int yAddr;
QPolygonF baseShape;
}
VModule.cpp :
VModule::VModule()
{
w = 80;
h = 80;
xAddr = w/2;
yAddr = h/2;
// Use the numbers to create a number of polygons
QVector<QPointF> basePoints = { QPointF(0.0, 0.0),
QPointF(xAddr, yAddr),
QPointF(0.0, yAddr * 2),
QPointF(-xAddr, yAddr) };
baseShape = QPolygonF(basePoints);
}
QRectF VModule::boundingRect() const
{
return QRectF(-xAddr, 0, w, h);
}
void VModule::paint(QPainter *painter, const QStypeOptionGraphicsItem *option, QWidget *widget)
{
// brushes and so on are set
// ...
painter->drawPolygon(baseShape, qt::OddEvenFill);
// there are other polygons are drawn in the same way as above
}
내 구현에 문제가 있습니까? 제가 누락 된 것이 있습니까? 모든 도움을 미리 감사드립니다.
이 몇 가지 좌표 변환 문제가 될 수 있습니다 (예를 들어, 당신은 절대 화면 좌표를 얻을 수 있지만, 장면은 자신의 좌표 예상) 잘 모르겠어요 동안 이벤트가에서 생성 및 처리 Lol4t0 @ – Lol4t0
나는 절대 좌표가 문제라고 생각하지 않는다. AFAIK QGraphicsItem도 장면 좌표를 사용합니까? – c0nn