- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 GUI 中有一个标签,将图像显示为 QPixmap
。我希望能够通过简单地单击图像上的任意位置以选择起点,然后通过单击图像的其他部分在其他地方绘制第二个点,从而在我的图像上绘制一条连续线。这两个点应该在放置第二个点后立即连接,我希望能够通过在图像上放置更多点来继续同一条线。
虽然我知道如何在 QPixmap
上绘制一些东西,但我需要使用鼠标事件来获取点的坐标,这让我很困惑,因为我对 还是很陌生>Qt
.
如有任何解决方案示例,我们将不胜感激。
最佳答案
我建议您为此目的使用QGraphicsView
。使用我的完美运行的代码片段。
子类QGraphicsScene
:
#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H
#include <QGraphicsScene>
#include <QPoint>
#include <QMouseEvent>
class GraphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
explicit GraphicsScene(QObject *parent = 0);
signals:
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
public slots:
private:
QPolygon pol;
};
#endif // GRAPHICSSCENE_H
.cpp 文件:
#include "graphicsscene.h"
#include <QDebug>
#include <QGraphicsSceneMouseEvent>
#include <QPainter>
GraphicsScene::GraphicsScene(QObject *parent) :
QGraphicsScene(parent)
{
addPixmap(QPixmap("G:/2/qt.jpg"));//your pixmap here
}
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
//qDebug() << "in";
if (mouseEvent->button() == Qt::LeftButton)
{
QPoint pos = mouseEvent->scenePos().toPoint();
pol.append(pos);
if(pol.size() > 1)
{
QPainterPath myPath;
myPath.addPolygon(pol);
addPath(myPath,QPen(Qt::red,2));
}
}
}
用法:
#include "graphicsscene.h"
//...
GraphicsScene *scene = new GraphicsScene(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->show();
结果:
如果你想将新的像素图(或只是获取像素图)保存为图像,请使用此代码:
QPixmap pixmap(ui->graphicsView->scene()->sceneRect().size().toSize());
QString filename("example.jpg");
QPainter painter( &pixmap );
painter.setRenderHint(QPainter::Antialiasing);
ui->graphicsView->scene()->render( &painter, pixmap.rect(),pixmap.rect(), Qt::KeepAspectRatio );
painter.end();
pixmap.save(filename);
使用 render()
,您还可以抓取场景的不同区域。
但是这段代码可以更好:我们创建和绘制相同的多边形。如果我们能记住最后绘制的点,那么我们就可以逐行绘制(行的开头是最后一行的结尾)。在这种情况下,我们不需要所有的点,我们只需要最后一点。
正如我所 promise 的(代码改进):只需提供额外的变量 QPoint last;
而不是 QPolygon pol;
并使用下一个代码:
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
//qDebug() << "in";
if (mouseEvent->button() == Qt::LeftButton)
{
QPoint pos = mouseEvent->scenePos().toPoint();
if(last.isNull())
{
last = pos;
}
else
{
addLine(QLine(last,pos),QPen(Qt::red,2));
last = pos;
}
}
}
如您所见,您只存储最后一个点并只绘制最后一条线。用户可以点击数千次,现在您不需要存储这些不必要的点并进行不必要的重绘。
关于c++ - 如何使用点在 QPixmap 上画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25959199/
我是 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 缩小。它看起来很断断续续: 如何从
我是一名优秀的程序员,十分优秀!