1

いくつかのグラフィック アイテムを含むシーンを含むグラフィック ビューがあります。これらのグラフィック アイテムをシーンの中央ではなく左側に表示するにはどうすればよいですか?

私は多くのアイデアを見てきましたが、運がありません。

4

2 に答える 2

1

QGraphicsRectItem最も簡単な方法は、最初の項目として非表示を追加することです。

次に、その最初のアイテムの子として他のアイテムを追加します。

1枚目の中心がコーディネートの中心。

QGraphicsScene *scene = new QGraphicsScene(widget.graphicsView);

// ....

QGraphicsRectItem *frame = scene->addRect(-100,-100,100,100);
frame->setPen(Qt::NoPen);

// ....

// Add new items as children of frame
// Align them relative to their parent

 

                           ^
                           |
                           |
        -100,100           |            100,100
            +-----------------------------+
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
---------------------------+------------------------>
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            +-----------------------------+
        -100,100           |            100,-100
                           |

ウィンドウ サイズを認識するようにするには、次のメソッドをオーバーライドします。

class MainForm : public QMainWindow
{
//...

QGraphicsScene *scene;     // Move it here
QGraphicsRectItem *frame;  // Move it here

protected:
    virtual void resizeEvent(QResizeEvent * event);
    virtual bool event(QEvent * event);
    virtual void resizeAction();
//...
};

void MainForm::resizeAction()
{
    QRectF rect(field->rect());
    widget.graphicsView->setSceneRect(rect);
    widget.graphicsView->fitInView(rect, Qt::KeepAspectRatio);
}

void MainForm::resizeEvent(QResizeEvent * event)
{
    resizeAction();
    QMainWindow::resizeEvent(event);
}

bool MainForm::event(QEvent * event)
{
    if (event->type() == QEvent::Show)
        resizeAction();

    return QMainWindow::event(event);
}
于 2013-04-09T11:00:10.917 に答える
0
Scene_item.setSceneRect(x0,y0,x1,y1);
于 2013-11-10T07:49:15.593 に答える