Qt-QGraphicsView:在视口外绘制

问题描述

我创建了一个自定义的QtGraphicsView类,称为MFDView。这个想法是:

(1)将单个图像绘制到整个MFDView上;

(2)在MFDView外围放置许多QPushButton(它们将显示在背景图像的顶部);和

(3)关联的QGraphicsScene显示在视图中心 ie 中,位于周围QPushButtons外围(场景也将显示在背景图像的顶部)。 / p>

在MFDView构造函数中,我调用setViewportMargins()将场景限制在MFDView的有限中央区域,并在MFDView上为外围QPushButtons创建空间。

我重写paintEvent(QPaintEvent * event)将图像绘制到MFDView上。

以下是相关代码

MFDView::MFDView(QWidget *parent) : QGraphicsView(parent),m_pMFDImg(0)
{
    createButtons(); //Creates and places peripheral QPushButtons

    QString str("D:\\blahblahblah\\image.png");
    m_pMFDImg = new QImage(str,"png");
    assert(m_pMFDImg->valid(20,20));
    
    QGraphicsScene *pScene = new QGraphicsScene(rect(),this);
    assert(pScene);
    setScene(pScene);

    setHorizontalScrollBarPolicy(Qt::ScrollBaralwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBaralwaysOff);

    setViewportMargins(150,150,150);
}

void MFDView::paintEvent(QPaintEvent *event)
{
   //QGraphicsView::paintEvent(event); //Tried this for debugging purposes.  No luck.

    QRect r = event->rect(); //For debugging

    QPainter painter(this);
    painter.drawImage(rect().topLeft(),*m_pMFDImg);

    //QGraphicsView::paintEvent(event); //Tried this for debugging purposes.  No luck.
}

在运行时,外围QPushButton和中央QGraphicsScene会按预期显示。但是,背景图像根本不显示。在paintEvent()中,我看到event-> rect()返回一个具有视口尺寸的rect。并且,由于较早调用了setViewportMargins(),因此rect小于MFDView :: rect()。显然,paintEvent()中的绘画被裁剪到视口矩形。

我也尝试覆盖drawBackground(QPainter *,const QRect)处理程序,但是它的绘图区域似乎也限制在视口(或更准确地说,限制在QGraphicsScene)。

最重要的是,我需要一种在MFDView视口之外进行绘制的方法。如果paintEvent()处理程序仅限于在视口内绘制(也就是说,仅限于在QGGraphicsScene占据的区域上绘制),则此处理程序在任何QAbstractScrollArea派生的类(例如QGraphicsView)中起什么作用?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)