Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过调整场景大小更改qgraphicsitem位置_C++_Qt_Resize_Qgraphicsview_Qgraphicsitem - Fatal编程技术网

C++ 通过调整场景大小更改qgraphicsitem位置

C++ 通过调整场景大小更改qgraphicsitem位置,c++,qt,resize,qgraphicsview,qgraphicsitem,C++,Qt,Resize,Qgraphicsview,Qgraphicsitem,我想通过在graphicsview上调整事件大小来更改我的QGraphicsSitem位置 我通过newSize/oldSize缩放位置,但我的项目保持在相同的位置。 我不知道我的代码有什么问题,也不知道有什么更好的方法可以改变我的物品位置 bool cameraItems::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::Resize) { QResizeEvent *

我想通过在graphicsview上调整事件大小来更改我的
QGraphicsSitem
位置

我通过
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);
    }
}
bool cameraItems::eventFilter(QObject*obj,QEvent*event)
{
如果(事件->类型()==QEvent::调整大小){
QResizeEvent*e=静态播放(事件);
如果(obj==ui->graphicsView){
setFixedSizeForGraphicsView(e->size(),e->oldSize());
ui->graphicsView->scene()->setscen竖立(0,0,e->size().width(),e->size().height());
用户界面->图形视图->设置屏幕竖立(0,0,e->size().width(),e-->size().height());
}
}
QWidget::eventFilter(obj,事件);
}
void cameraItems::setFixedSizeForGraphicsView(QSize大小,QSize旧大小)
{
foreach(单摄像头*摄像头,多摄像头){
prevImageSize=cam->imageSize();
QPointF-ppos=cam->pos();
QPointF newPos=QPointF((ppos.x()/prevSize.width())*size.width(),(ppos.y()/prevSize.height())*size.height());
凸轮->设置位置(新位置);
}
}

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

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

    QGraphicsView::resizeEvent(event);
}
这样,视图将始终显示整个场景。也就是说,如果更改了窗口大小并调整了graphicsView的大小,则场景将缩放,您可以适当地查看所有内容