c++ - 通过调整场景大小改变 qgraphicsitem 位置

标签 c++ qt resize qgraphicsview qgraphicsitem

我想通过图形 View 上的调整大小事件来更改我的 QGraphicsItem 位置。

我按 newSize/oldSize 缩放位置,但我的项目保持在相同位置。 我不知道我的代码有什么问题或更改项目位置的更好方法。

bool cameraItems::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::Resize) {
        QResizeEvent *e = static_cast<QResizeEvent*>(event);
        if(obj == ui->graphicsView) {
                setFixedSizeForGraphicsView(e->size(), e->oldSize());
                ui->graphicsView->scene()->setSceneRect(0, 0, e->size().width(), e->size().height());
                ui->graphicsView->setSceneRect(0, 0, e->size().width(), e-->size().height());
        }
    }
    QWidget::eventFilter(obj, event);
}



void cameraItems::setFixedSizeForGraphicsView(QSize size, QSize oldSize)
{
    foreach (singleCamera *cam, m_cameras) {
            prevImageSize = cam->imageSize();
        QPointF ppos = cam->pos();
        QPointF newPos = QPointF((ppos.x()/prevSize.width())*size.width(), (ppos.y()/prevSize.height())*size.height());
        cam->setPos(newPos);
    }
}

最佳答案

您可以创建继承自 QGraphicsView 的自定义类,然后重新实现 resizeEvent( QResizeEvent *event ),例如:

void MyView::resizeEvent(QResizeEvent *event)
{
    QRectF rect = this->scene()->itemsBoundingRect();
    fitInView(rect, ,Qt::KeepAspectRatio);

    QGraphicsView::resizeEvent(event);
}

这样 View 将始终显示整个场景。 IE。如果更改窗口大小并调整 graphicsView 的大小,则场景会缩放,您可以适本地看到所有内容。

关于c++ - 通过调整场景大小改变 qgraphicsitem 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32537304/

相关文章:

c++ - 是否有重载的 sqrt 等数学函数

c++ - 可缩放和平移的易于使用的 GUI?

iphone - 无法让 UIView sizeToFit 做任何有意义的事情

android - 为什么 Galaxy Nexus/Android 4 上的视口(viewport)标签不起作用?

c# - 如何在 WPF 中调整 Canvas 的大小?

c++ - 用 C++ 将不同的结构写入文件?

部分模板的 C++ typedef

c++ - 在 main() 之外的 Qt 中创建一个窗口?

c++ - 使用 STL 列表获取最高值

c++ - QtCreator : How to compile external source files