QGraphicsView杂记
记录些自己用到的。
场景类(QGraphicsScene类):放置图元的容器,本身不可见。
视图类(QGraphicsView类):可视的窗口,用于显示场景中的图元。
图元类(QGraphicsItem类):各个图元的基类。直线(QGraphicsLineItem)、椭圆(QGraphicsEllipseItem)、文本(QGraphicsTextItem)、矩形(QGraphicsRectItem)、图像(QGraphicsPixmapItem)。
【保存scene中缩放后的图】
scale虽然可以缩放(scene与所有item一起缩放),但不会改变scene及其上的item的尺寸
view->scale(2.0,2.0);
setScale才会改变item及scene的尺寸,若要所有item一起缩放需对每个item设置。
pixmapItem=scene->addPixmap(QPixmap::fromImage(qImg)); m_nFactor=2*m_nFactor; //放大2倍 pixmapItem->setScale(m_nFactor); QPixmap pix(scene->width(), scene->height()); QPainter painter(&pix); scene->render(&painter); pix.save("D:/scene.bmp");
【保存view中的图,不带滚动条】
//先隐藏滚动条 view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QPixmap viewPix=view->grab(); view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); viewPix.save("D:/view.bmp");
【QGraphicsLineItem的位置】
在图像的第1行画水平绿色线,宽度为1时占1行像素,为2时占2行像素,为3时占3行像素。
下图中红线是QPen的起始和终止位置,绿色才是QPen画出的带宽度的线。
QPen pen; pen.setColor(Qt::green); //绿色 //pen.setStyle(Qt::DashDotLine); //虚线 int penWidth=1; QGraphicsLineItem* hLineItem1=scene->addLine(0+penWidth/2.0,0+penWidth/2.0,7-penWidth/2.0,0+penWidth/2.0); pen.setWidth(penWidth); hLineItem1->setPen(pen); penWidth=2; QGraphicsLineItem* hLineItem2=scene->addLine(0+penWidth/2.0,5+penWidth/2.0,7-penWidth/2.0,5+penWidth/2.0); pen.setWidth(penWidth); hLineItem2->setPen(pen); penWidth=3; QGraphicsLineItem* hLineItem3=scene->addLine(0+penWidth/2.0,10+penWidth/2.0,7-penWidth/2.0,10+penWidth/2.0); pen.setWidth(penWidth); hLineItem3->setPen(pen);
【参考的高质量博客】