- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个应用程序,需要在图片上方绘制图形(即矩形)并调整整个场景的大小。我正在使用 QGraphicsView 和 QGraphicsScene。我不明白为什么,但是当我使用 fitIntoView()
时,我无法在图片顶部绘制图形(它们可能是在图片后面或边界之外绘制的)。
现在我使用 QPixmap.scaled()
使图像适合 QGraphicsScene
。它工作正常,除非我需要显示大图像然后放大它。因为我缩放了图像以适应,它变得更小,当我调用 QGraphicsView.scale() 时图像缩放得很小一个,我找不到一种方法将图像“缩小”到原始尺寸。
在代码的缩放部分,我尝试用未缩放的副本替换像素图,但我无法以与我的数字缩放相同的比例缩放它。任何帮助将不胜感激!
<小时/>这里我加载图像并缩放它
QPixmap pix;
pix = pixmap->scaled(wid, hei,Qt::KeepAspectRatio, Qt::SmoothTransformation);
scn = new QGraphicsScene(pw);
pw->setScene(scn);
p = new QGraphicsPixmapItem(pix);
p->setPixmap(pix);
scn->addItem(p);
我画的人物是这样的
rect = new QGraphicsRectItem(x,y,w,h);
rect->setPen(QPen(getColor(), 1, Qt::SolidLine, Qt::FlatCap));
scn->addItem(rect);
这就是我如何缩放
pw->scale(scaleFactor_,scaleFactor_);
<小时/>
更新:现在我有一个顶部有某种工具栏的 QWidget
,其余的可用空间由自定义的 QGraphicsView
填充。这是一个用于抓取鼠标事件的派生类,除了事件处理程序的重写之外什么也没有。我在小部件的构造函数中添加 PainterGraphicsView:
pw = new PainterGraphicsView();
ui->gridLayout_3->addWidget(pw);
每次加载新图像时,我都会重新创建场景:
scn = new QGraphicsScene(pw);
pw->setScene(scn);
QRect r = QRect(0,0, pw->width()-5, pw->height()-5);
scn->setSceneRect(r);
加载图像后,我可以在其上绘制图形,如下所示:
缩放后的内容如下所示:
如您所见,图形与像素图一起缩放,这正是我需要它的工作方式。我唯一需要解决的是缩放像素图的低质量。正如我已经说过的,我尝试在 ZoomIn 方法中用原始像素图替换像素图,但我无法保存图形的位置。
void DrawerWidget::on_btZoom_clicked()
{
p->setPixmap(pix); //p is QGraphicsPixmapItem, pix is an original pixmap
p->setScale(0.5); //how can I scale the pixmap together with figures?? How to calculate the required scale?
pw->scale(scaleFactor_,scaleFactor_);
}
<小时/>
更新2:
对我的绘图方法的简短说明:(虽然我个人认为这不是问题,但我感兴趣是否有一种方法可以使用 setScale() 缩放 QGraphicsPixmapItem 以适应 QGraphicsView 大小)
我从鼠标事件参数获取 start_
和 end_
坐标(QMouseEvent *e)
end_=pw->mapToScene(e->pos());
start_=pw->mapToScene(e->pos());
我在鼠标按下时添加了图形:
rect = new QGraphicsRectItem(start_.x(),start_.y(),1,1);
scn->addItem(rect);
我在鼠标移动时重新绘制图形
rect->setRect(Graphics::GetFigure(start_.x(),start_.y(),end_.x(),end_.y()));
GetFigure是一个计算图形矩形的方法,这里是它的主要部分:
static QRectF GetFigure(double startX, double startY, double finalX, double finalY)
{
QRectF shape;
shape.setX(startX);
shape.setY(startY);
shape.setWidth(qFabs(finalX - startX));
shape.setHeight(qFabs(finalY - startY));
return shape;
}
最佳答案
缩放操作具有破坏性,一旦缩小,最终得到的数据会比开始时少。
如果您希望能够恢复原始大小,请保留原始像素图的副本。
您可以从原始的、未缩放的像素图创建QGraphicsPixmapItem
,然后使用 QGraphicsPixmapItem::setScale(qreal)
更改关卡图形项目的大小,而不是关卡像素图数据的大小。这样缩放不应该具有破坏性,并且如果将其放大到原始尺寸,也不会损失质量。
如果您想缩放多个项目(并且不遇到不同的转换原点问题),您有几个选择:
Item transformations accumulate from parent to child
createItemGroup()
将项目添加到组中:The items are all reparented to the group, and their positions andtransformations are mapped to the group
关于qt - 放大缩小的 QPixmap : can't restore original size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652158/
我是 Qt 和 Qt Graphics API 的新手。 我有一个较大的QPixMap和一个较小的QPixMap。我需要用较小的部分替换较大部分的一部分(QRect)。 我该如何实现这一目标? 谢谢。
我正在为一个项目使用 PyQt。但并非突然间我收到一个错误: QPixmap: It is not safe to use pixmaps outside the GUI thread in PyQt
我有一个 QPixmap,我想在 QWidget 上绘制它。但是,我想将其设置为 50% 透明,以便可以在下面看到背景。我怎样才能做到这一点? 最佳答案 您在 QPainter 中设置了组合模式然后使
我想要一个 QPixmap尺寸为 50 x 50。 我试过 : QPixmap watermark(QSize(50,50)); watermark.load(":/icoMenu/preparati
当我直接这样写图片路径的时候 QPixmap imgBtry("/some/path/resources/Battery100.png"); 它工作得很好,但当我将路径存储在变量中时它不起作用。我应该
我需要重新创建 Windows 7 主题,其中应用程序窗口标题是透明的并显示模糊的屏幕内容。我的想法是捕获屏幕内容并在标题中模糊显示它们。出于这个原因,我扩展了 QQuickPaintedItem。
我正在使用 C++ Qt 创建一个应用程序,我想加载多个图像。我想为每个图像附加一个信号,以便我可以在之后启用或禁用它们。 有什么帮助吗? 编辑 1: imageDlg = new QFileDial
我正在尝试使用 QPixmap 和 QLabel 将图像放入我的表单中。但我无法将图像加载到 QPixmap。这是我所拥有的: qDebug() << QFile("C:/img.png").exis
我正在尝试将原始像素数据转换为 QPixmap,但在将 qimage 转换为 qpixmap 时出现错误。 首先,我通过 qlocalsocket 从服务器 A 发送原始数据,客户端 B 获取它。 这
我有一个程序需要加载很多 QPixmaps。我使用 QtConcurrent::mappedReduced 将像素图的加载分成几个作业(我实际上加载了一堆 QGraphicPixmapItem s)。
我想在 Qt 中的 QPixmap 上获取鼠标按下事件。我尝试使用以下方法对其进行子类化: class CustomPixmap : public QPixmap { Q_OBJECT pub
假设我有一个尺寸为 (20 x 100) 的 QPixmap。如何创建此 QPixmap 的拷贝,该拷贝旋转了特定数量并且还具有新维度来分配旋转像素图的新维度? 我找到了多个关于如何使用 QPaint
我试图在带有 QPixmap 的 QLabel 上显示图片,但图像没有显示。有人可以帮助我吗? onglets = new QTabWidget(this); //création des on
我是 Qt 的新手,我正在用它制作游戏。我想显示图标,但在放置一些代码后我无法在任何地方找到它。我很困惑,因为我没有收到任何错误,所以我很确定我只是没有添加任何东西。帮助。 战斗.h文件 #ifnde
我正在尝试获取一个小部件的 QPixmap,但是该小部件被硬件覆盖了。它曾经有效,直到我更换显卡。有问题的代码是: ... QByteArray ba; QBuffer buffer(&ba); bu
我有一张图片,我在上面绘制了一个矩形。之后我试图将矩形的内容复制到另一个 QLabel 上。这似乎可行,但我似乎无法从图像的左上角开始对齐复制的图像。这是我正在做的 QPixmap original_
我正在开发一个视觉应用程序,我需要使用 QPixmap 对象在屏幕上显示来自相机的“实时 View ”。我们将以 30 帧/秒的速度持续更新屏幕。 我的问题是,这个应用程序必须在一些 3-5 年的旧计
我正在尝试为我的QPushButtons 设置图标。我只能通过将完整路径放入 QPixmap 构造函数来做到这一点。 类似这样的东西: m_button->setIcon(QPixmap("C:/Us
在速度表上标记了一根指针。 // 이미지 출력 QPixmap pix("C:\\Users\\WORK002\\Desktop\\speedmeter.png"); QPixmap pix2("C:
我有以下小部件: pixmap = QtGui.QPixmap(r'pics\cdaudio.png').scaled(100, 100) 图像从 256x256 缩小。它看起来很断断续续: 如何从
我是一名优秀的程序员,十分优秀!