gpt4 book ai didi

c++ - qt图形场景中qtgraphics项的对齐

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:47 27 4
gpt4 key购买 nike

我有一个图形 View ,其中包含一个带有一些图形项的场景。我怎样才能让这些图形项目出现在场景的左侧而不是中心?

我浏览了很多想法,但没有运气。

最佳答案

最简单的方法是添加一个不可见的 QGraphicsRectItem 作为第一项。

然后添加其他项目作为第一个项目的子项。

第一项的中心是协调的中心。

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);
}

关于c++ - qt图形场景中qtgraphics项的对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15899956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com