用qt写一个在图片上任意画线,且显示起点和终点像素坐标的代码,坐标的原点为图像的左上角
时间: 2024-05-06 14:15:48 浏览: 128
以下是一个简单的示例代码,使用Qt提供的QPainter类在图像上绘制线条并显示起点和终点的像素坐标:
```cpp
#include <QApplication>
#include <QWidget>
#include <QPixmap>
#include <QPainter>
#include <QMouseEvent>
#include <QLabel>
class ImageWidget : public QWidget
{
public:
ImageWidget(QPixmap pixmap)
: m_pixmap(pixmap)
{
setFixedSize(m_pixmap.size());
}
protected:
void paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0, 0, m_pixmap);
}
void mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_startPoint = event->pos();
}
}
void mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_endPoint = event->pos();
QPainter painter(&m_pixmap);
painter.setPen(QPen(Qt::red, 2));
painter.drawLine(m_startPoint, m_endPoint);
QLabel *label = new QLabel(QString("(%1, %2) - (%3, %4)")
.arg(m_startPoint.x()).arg(m_startPoint.y())
.arg(m_endPoint.x()).arg(m_endPoint.y()));
label->setStyleSheet("background-color: white");
label->move(event->globalPos());
label->show();
update();
}
}
private:
QPixmap m_pixmap;
QPoint m_startPoint;
QPoint m_endPoint;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// Load an image file
QPixmap pixmap(":/path/to/image.png");
ImageWidget widget(pixmap);
widget.show();
return app.exec();
}
```
该代码创建了一个自定义的QWidget,可以加载一张图片并在其上绘制线条。当用户在图片上按下鼠标左键时,记录起点坐标,在松开鼠标左键时记录终点坐标,并在两点之间绘制一条红色的线条。同时,还会在鼠标松开处显示起点和终点的像素坐标。
注意,该示例代码中使用的坐标系原点为图像的左上角,与Qt默认的坐标系原点(左下角)不同。
阅读全文