【问题标题】:QGraphicsView and QGraphicsScene total sizeQGraphicsView 和 QGraphicsScene 总大小
【发布时间】:2014-05-06 16:30:04
【问题描述】:

我有一个QGraphicsView 并在上面放置了QGraphicsScene。在舞台上我放置了QGraphicsItem,并检查了视图边框小部件的输出项:

 if(!(ui->area->sceneRect().contains((ui->area->mapFromScene(item->boundingRect())).boundingRect()))){...}

我的问题是场景超出了小部件的大小,即项目可以移动到可见小部件的边界之外。然后,触发交叉事件,这意味着场景仍然是有限的矩形。

我将场景设置如下:

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),  ui(new Ui::MainWindow){
        scene= new QGraphicsScene(ui->area);
        scene->setSceneRect(0,0,ui->area->size().width(),ui-area->size().height());
        scene->setBackgroundBrush(QBrush(Qt::black)); 
        ui -> area -> setRenderHints ( QPainter :: Antialiasing
                         |  QPainter :: SmoothPixmapTransform
                         |  QPainter :: TextAntialiasing );
        ui->area-setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); 
        ui->area-setCacheMode(QGraphicsView::CacheBackground);
        ui->area-setRenderHint(QPainter::Antialiasing,false); 
        ui->area->setInteractive(true); ui-area-setScene(scene);
        ui->area->setScene(scene);
       .... 

}

我的错误是什么? 附言在调整主窗口大小时,更多人将不胜感激有关如何实现调整大小小部件(使用场景)的建议?小部件位于QHBoxLayout

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    您可以创建继承自 QGraphicsView 的自定义类。您应该在自定义 QGraphicsView 中重新实现 resizeEvent( QResizeEvent *event ),例如:

    void MyView::resizeEvent(QResizeEvent *event)
    {
    
        fitInView(0, 0, 500, 500,Qt::KeepAspectRatio);
    
        QGraphicsView::resizeEvent(event);
    }
    

    这样视图将始终显示整个场景。 IE。如果改变了窗口大小并且调整了 graphicsView 的大小,场景就会被缩放,你可以适当地看到一切。

    【讨论】:

    • 我继承自QGraphicsView并实现了void resizeEvent(QResizeEvent *);,但是stage的大小还是比widget大。
    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2013-11-19
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多