这里弄出两段关键代码:
一个是保存图片的函数:
void UICanvasView::saveToImage(const QString& imagePath)
{
m_pScene->SetImageSaveFlag(true);
int width = m_pScene->width();
int height = m_pScene->height();
QPixmap pixSaveImage(width, height);
pixSaveImage.fill(QColor(0, 0, 0, 0));//用透明色填充
QPainter painterTanns(&pixSaveImage);
painterTanns.setRenderHint(QPainter::Antialiasing, true);
painterTanns.setRenderHint(QPainter::TextAntialiasing, true);
painterTanns.setRenderHint(QPainter::SmoothPixmapTransform, true);
cleanAllSelected();
m_pScene->render(&painterTanns);
pixSaveImage.save(imagePath);
m_pScene->SetImageSaveFlag(false);
return;
}
为什么要SetImageSaveFlag,这是因为很多QGraphicsScene人的这里可能设置了背景函数:
void UICanvasScene::SetImageSaveFlag(bool bFlag)//正在保存图片时,要设置背景透明
{
m_IsSaveImageingFlag = bFlag;
}
void UICanvasScene::drawBackground(QPainter *painter, const QRectF &rect)
{
if (m_IsSaveImageingFlag)
{//保存中的时候
painter->fillRect(rect, QColor(0, 0, 0,0));
QRectF sceneRect = this->sceneRect();
QColor colSet = m_pBackgroundColorAttribute->getValue().value<QColor>();
QColor newCol(255,255,255, 0);
painter->fillRect(sceneRect, QBrush(newCol));
return QGraphicsScene::drawBackground(painter, rect);
}
else
{
painter->fillRect(rect, QColor(60, 60, 60));
QRectF sceneRect = this->sceneRect();
painter->fillRect(sceneRect, QBrush(m_pBackgroundColorAttribute->getValue().value<QColor>()));
return QGraphicsScene::drawBackground(painter, rect);
}
}
所以保存时要特意设置一下,然后看下生成的图片吧,有ps看吧,只看图片也不知道透明了没,哈哈