Qt Creator中如何在QLabel上画矩形框并且保存画完后的图形

问题描述:

在QLabel上显示一张图片,然后在该图片上画一个矩形框  最后保存一张带矩形框的图片

第一步:

在图片上画矩形框   网上教程很多  代码如下: 头文件

#ifndef MYQLABEL
#define MYQLABEL

#include <QLabel>
#include <QMouseEvent>
#include <QString>

class MyQLabel : public QLabel{
//    Q_OBJECT
public:
//    explicit MyQLabel();
    void paintEvent(QPaintEvent* event);
    void mousePressEvent(QMouseEvent* event);
    void mouseReleaseEvent(QMouseEvent* event);
    void mouseMoveEvent(QMouseEvent* event);
    int x1, y1, x2, y2;

    void savePicture(QString path, int filename);

public:
    int getX1() {return x1;}
    int getY1() {return y1;}
    int getX2() {return x2;}
    int getY2() {return y2;}
};

#endif // MYQLABEL

源文件:

#include <QPainter>
#include <QPen>
#include <QRect>
#include <QCursor>
#include <QApplication>
#include <QPixmap>
#include <QImage>

#include "myqlabel.h"

void MyQLabel::paintEvent(QPaintEvent *event)
{
    //comment before
    QLabel::paintEvent(event); //绘制背景的图片

    QPainter painter(this);

    painter.setPen(QPen(Qt::red, 2));
    painter.drawRect(QRect(x1, y1, x2 - x1, y2 - y1));
}

void MyQLabel::mousePressEvent(QMouseEvent *event)
{
    x1 = event->pos().x();
    y1 = event->pos().y();
    QCursor cursor;
    cursor.setShape(Qt::ClosedHandCursor);
    QApplication::setOverrideCursor(cursor);
}

void MyQLabel::mouseReleaseEvent(QMouseEvent *event)
{
    x2 = event->pos().x(); //鼠标相对于所在控件的位置
    y2 = event->pos().y();
    update();
    QApplication::restoreOverrideCursor();

}

void MyQLabel::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton) {
        x2 = event->pos().x(); //鼠标相对于所在控件的位置
        y2 = event->pos().y();
        update();
    }
}

第二步:

保存画完后的整个图形

思路如下:

取得QLabel上的图像  将其加入到一个Painter   然后获取之前画的矩形框的  起始 和终止坐标  重新绘制 然后保存

QImage tmpimage = image.copy();

    QPixmap pmap;
    pmap = pmap.fromImage(tmpimage);
    label_video1->setPixmap(pmap);

    QImage img(label_video1->pixmap()->toImage());
    QPainter painter;
    painter.begin(&img);
    painter.setPen(QPen(Qt::red, 2));
    painter.drawRect(QRect(label_video1->getX1(), label_video1->getY1(),
                           label_video1->getX2() - label_video1->getX1(),
                           label_video1->getY2() - label_video1->getY1()));
    painter.end();
    label_video2->setPixmap(QPixmap::fromImage(img));

原文地址:https://www.cnblogs.com/lifeng-blog/p/9057509.html

时间: 2024-11-10 07:41:49

Qt Creator中如何在QLabel上画矩形框并且保存画完后的图形的相关文章

Qt Creator中使用qss对界面美化没有作用(效果)的问题

最近在研究qt界面开发,发现使用qss对界面进行美化后效果不错,要比mfc效率高很多,美化效果也很出色.但是在使用qss文件对界面控件进行美化的过程中遇到了个很奇葩的问题,困惑了我好久,今晚又遇到了,感觉整个人都不好了,问题症状如下: (1)我在Qt Creator中新建了一个工程,添加qss文件及内容后运行,加载qss文件并运行程序,qss美化效果死活出不来(经检查,qss内容及加载过程都正确): (2)在Qt Creator中打开一个现有项目,该项目中含有qss文件,能正确加载,在别的电脑上

QT creator中使用opencv采集摄像头信息

之前在QT creator上成功编译了opencv,由于课题需要,需要采集摄像头的信息.故搜集了网上的一些资料,依葫芦画瓢的照着做了一下,终于简单的成功采集了信息. 打开QTcreator,新建一个widget工程. 在界面上放两个label 分别用来显示摄像头采集到的数据和照的照片. 在widget.h中的源代码如下: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QImage> #include &

QT creator中使用opencv

最近要用到opencv做图像方面的东西,网上很多是用VS加opencv,但自己对VS不怎么喜欢,想用QT Creator.在网上搜索了很多资料,终于花了一天的时间,在QT Creator上能使用opencv了. 需要的软件:(1)QT Creator.我的版本是4.8.5.这个版本还是在学习亚飞的QT Creator的时候安装的,网上有说QT版本低,而opencv版本高的话,可能在执行mingw32-make命令会报错.因此为了以防万一,我下载的低版本的opencv (2)opencv.我的版本

Qt入门学习——Qt Creator 中 ui 文件和 Qt 代码关系

通过<Qt Creator的使用>的学习,我们可以借助 Designer(界面设计器)快速设计界面. 此例子 ui 内容如下(只是简单添加了一个按钮): 工程的代码目录结构如下: 最终在工程所在目录会生成一个 ui 文件: 此 ui 文件实际上是xml 文件: 当我们编译 Qt 程序代码,Qt Creator 用 uic 工具把 ui 文件的内容转换成 C++ 代码,在工程目录同一级目录的 build- 目录下自动生成 ui_类名.h 文件,如本例子中的 ui_mywidget.h,是由 my

windows下,Qt Creator 中javascript调试器安装并使用

最开始使用Qt Creator时,想使用断点来调试javascript代码.但在按下debug键后,却提示调试器未配置,让我比较郁闷. 好了,郁闷的是说了,咱们来说说高兴的.要Qt Creator调试的问题,我们需要按照如下步骤,一步步地完成调试器的下载.安装.配置: 1.首先是下载debug工具包,网址:http://www.microsoft.com/en-us/download/details.aspx?id=11800 图一 2.解压并安装GRMWDK_EN_7600_1.ISO中的De

Windows下Qt Creator中使用cef的一个学习例子

参考:https://blog.csdn.net/qq_31683775/article/details/84025025 qt中集成cef浏览器例子qtCefBrowser参考上上篇文章,vs2017编译生成:libcef_dll_wrapper.lib(静态库,debug-MDd,release-MD) qtCefBrowser工程结构如下: qt代码如下: qtCefBrowser.pro 12345678910111213141516171819202122232425262728293

python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框

最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视频播放的过程中,当想选中哪幅图来标记目标时,按下暂停键. 2.框出你想要检测的目标. 那要怎么实现呢? 首先是暂停怎么实现呢?介于是摄像头直播,我们先将那副图像复制并在另一个窗口显示.然后关掉摄像头,就完成了暂停.后面标记完目标再打开摄像头就行了.那具体怎么实现呢... import cv2 dra

解决Qt Creator中Gdi32.lib的无法打开的问题

在刚刚开始使用Qt Creator的时候新建一个项目有的时候会出现link错误,提示gdi32.lib无法打开. 在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib下找到gdi32.lib: 然后放入到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib目录下和C:\Qt\Qt5.0.2\5.0.2\msvc2012_64\lib目录下: 我使用的是VS2012. Qt5

Qt Creator 中,如何更改h,cpp,ui的文件并不让ui失效

这个星期在使用qt,碰到一个很蛋疼的问题:创建对话框的时候,不小心输错了名字.而且是在很迟才发现的.这个时候对话框都已经布局差不多了,为了改名字,碰到更蛋疼的问题,改了名字后就无法使用转到槽的功能了.具体的错误显示如下: this application failed to start because - 经过一场大战,终于知道如何改名字,下面说下步骤: 1:更改h,cpp,ui的名字. 2:到ui文件中,把对象名字更改了.这里最好在右下角的属性框里改,更改后按下enter. 3:到cpp文件中