问题描述
我创建了一个自定义的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 (将#修改为@)