无法在QGraphicsGridLayout中获取项目的场景位置

时间:2015-12-03 11:16:04

标签: c++ qt qgraphicsview

我的学校项目出了问题......我无法获得QGraphicsGridLayout中任何对象的场景位置,它总是给我(0,0)。也许我的QGraphicsWidget很糟糕?

这是我如何使用它的一个例子:

主要

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QGraphicsScene *scene = new QGraphicsScene();

    myCustomWidget *a = new myCustomWidget("a");
    myCustomWidget *b = new myCustomWidget("b");
    myCustomWidget *c = new myCustomWidget("c");

    QGraphicsGridLayout *layout = new QGraphicsGridLayout();

    layout->addItem(a,0,0,1,2, Qt::AlignCenter);
    layout->addItem(b,1,0,1,1);
    layout->addItem(c,1,1,1,1);

    QGraphicsWidget *w = new QGraphicsWidget();
    w->setLayout(layout);
    scene->addItem(w);

    QWidget* Window = new QWidget();
    Window->setMinimumSize(640,380);
    QVBoxLayout* layoutWindow = new QVBoxLayout();
    Window->setLayout(layoutWindow);

    QGraphicsView *view = new QGraphicsView(Window);
    view->setScene(scene);
    view->show();

    layoutWindow->addWidget(view);
    Window->show();

    ////////////////////////////////
    // Always return QPointF(0,0) //
    ////////////////////////////////
    qDebug() << c->scenePos();

    return app.exec();
}

myCustomWidget:

class myCustomWidget : public QGraphicsWidget
{
private:
    QString caption;
public:
    myCustomWidget(QString caption, QGraphicsWidget* parent = 0) :     QGraphicsWidget(parent)
    {
        this->caption = caption;
    }
    QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
    {
        Q_UNUSED(which);
        Q_UNUSED(constraint);
        return QSizeF(100,100);
    }
    QRectF boundingRect() const
    {
        return QRectF(QPointF(0,0), QSizeF(100,100));
    }
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget * = 0) Q_DECL_OVERRIDE
    {
        QFont font;
        font.setPixelSize(0.75 * qMin(boundingRect().width(), boundingRect().height()));
        painter->fillRect(boundingRect(), Qt::black);
        painter->setFont(font);
        painter->setPen(QPen(Qt::white));
        painter->drawText(boundingRect(), Qt::AlignCenter, caption);
    }
};

0 个答案:

没有答案