QT做类似QQ截图功能(带图片编辑功能)

转自:https://blog.csdn.net/u011915578/article/details/46739069

这里采用的方法是按下截屏按钮截取整个桌面,然后通过鼠标的拖动选中截取的区域,
并把这个区域用截取的那张大图中相应的位置设置为QLabel背景,
实现了类似QQ的图片编辑功能,划线、矩形、画圆、文字编辑。
至于那个类似QQ的箭头功能暂时还没有实现,已经有了思路,后续补上。
好的,上代码:
class ScreenShot : public QWidget
{
Q_OBJECT

public:

static ScreenShot* Instance()
{
    if (!instance)
        instance = new ScreenShot();
    return instance;
}
//ScreenShot();
void mouseMoveEvent(QMouseEvent *e);       // 处理鼠标移动
void mousePressEvent(QMouseEvent *e);      // 处理鼠标按下
void mouseReleaseEvent(QMouseEvent *e);    // 处理鼠标释放
void paintEvent(QPaintEvent *e);
void setbackground(int width, int height); // 初始化程序背景
void grabScreen();                         // 根据选取截屏,保存并打开图片
void setLabel();                           // 动态显示截图区域尺寸
void setSelectImageLabel(QMouseEvent *e);  // 用来显示选中图片
void keyPressEvent(QKeyEvent *e);          // 处理esc取消按键
~ScreenShot();
//void show();                               // 重写 show() 每次显示都重新渲染窗体背景 单例需要
void takeSnap();

public slots:

void onclickSaveAsBtn();
void onclickCancelBtn();
void onclickConfirmBtn();
void onClickDrawLineBtn();
void onClickRectangleBtn();
void onClickDrawRoundBtn();
void onClickTextEditBtn();
private:

//QRubberBand* g_rubber;
QPoint origin;                            // 记录鼠标按下坐标
QPoint end;                               // 记录鼠标释放坐标
QLabel* label;                            // 显示截图区域尺寸(x,y)
QSLabel* labelImage;                      // 用来显示选定区域的图片
QImage bg;                                // 记录全屏图片
QImage bg_gray;                           // 全屏灰色的图片
QRect rect;                               // 选中图片所在的矩形
int g_width;                              // 屏幕宽度
int g_height;                             // 屏幕高度
static ScreenShot* instance;
ScreenShot();
void closeAll();                        //截图完成之后close按钮以及label
void setWindowNoState();                //截图完成后主窗口恢复
QPushButton *_cancelBtn, *_confirmBtn, *_saveAsBtn;//截好图之后显示,“取消”“确定”“另存为”三个按钮
QPushButton *_drawRoundBtn, *_drawLineBtn, *_rectangleBtn, *_textEditBtn, *_arrowBtn;
int finalWidth, finalHeight, finalX, finalY = 0;

QTimer *setBackgroundTime;
QRect deskRect;
};

具体的方法实现:

ScreenShot* ScreenShot::instance = 0;
ScreenShot::ScreenShot()
{
_saveAsBtn = new QPushButton(this);
_saveAsBtn->hide();
_saveAsBtn->setFixedSize(54, 32);
_saveAsBtn->setToolTip(qsl("保存为"));

_cancelBtn = new QPushButton(this);
_cancelBtn->hide();
_cancelBtn->setFixedSize(54, 32);
_cancelBtn->setToolTip(qsl("关闭"));

_confirmBtn = new QPushButton(this);
_confirmBtn->hide();
_confirmBtn->setFixedSize(54, 32);
_confirmBtn->setToolTip(qsl("确定"));

_drawLineBtn = new QPushButton(this);
_drawLineBtn->hide();
_drawLineBtn->setFixedSize(54, 32);
_drawLineBtn->setToolTip(qsl("划线"));

_drawRoundBtn = new QPushButton(this);
_drawRoundBtn->hide();
_drawRoundBtn->setFixedSize(54, 32);
_drawRoundBtn->setToolTip(qsl("圆"));

_rectangleBtn = new QPushButton(this);
_rectangleBtn->hide();
_rectangleBtn->setFixedSize(54, 32);
_rectangleBtn->setToolTip(qsl("矩形"));

_textEditBtn = new QPushButton(this);
_textEditBtn->hide();
_textEditBtn->setFixedSize(54, 32);
_textEditBtn->setToolTip(qsl("文字"));

_arrowBtn = new QPushButton(this);
_arrowBtn->hide();
_arrowBtn->setFixedSize(54, 32);
_arrowBtn->setToolTip(qsl("箭头"));

takeSnap();

//初始化变量
//g_rubber = NULL;
origin = end = QPoint(0, 0);
//截图标签
label = new QLabel("");
labelImage = new QSLabel(this);
Qt::WindowFlags nType = Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint;
//setWindowFlags(nType);
setWindowFlags(Qt::FramelessWindowHint);
label->setWindowFlags(nType);
labelImage->setWindowFlags(nType);

connect(_saveAsBtn, SIGNAL(clicked()), this, SLOT(onclickSaveAsBtn()));
connect(_cancelBtn, SIGNAL(clicked()), this, SLOT(onclickCancelBtn()));
connect(_confirmBtn, SIGNAL(clicked()), this, SLOT(onclickConfirmBtn()));
connect(labelImage, SIGNAL(onDoubleClick()), this, SLOT(onclickConfirmBtn()));
connect(_drawLineBtn, SIGNAL(clicked()), this, SLOT(onClickDrawLineBtn()));
connect(_drawRoundBtn, SIGNAL(clicked()), this, SLOT(onClickDrawRoundBtn()));
connect(_rectangleBtn, SIGNAL(clicked()), this, SLOT(onClickRectangleBtn()));
connect(_textEditBtn, SIGNAL(clicked()), this, SLOT(onClickTextEditBtn()));
connect(_arrowBtn, SIGNAL(clicked()), this, SLOT(onClickArrowBtn()));
}

ScreenShot::~ScreenShot()
{
}

void ScreenShot::mousePressEvent(QMouseEvent *e)
{
//if (!g_rubber)
{
    //g_rubber = new QRubberBand(QRubberBand::Rectangle, this);
}
// 将橡皮框设置可见
//g_rubber->show();
// 记录点击位置
origin = e->pos();
// 设置橡皮框选区
//g_rubber->setGeometry(origin.x(), origin.y(), 0, 0);
}

void ScreenShot::mouseMoveEvent(QMouseEvent *e)
{
//if (g_rubber)
{
    // 记录终点
    end = e->pos();

    //调整要显示的区域
    int w = abs(end.x() - origin.x());
    int h = abs(end.y() - origin.y());
    int x = origin.x() < end.x() ? origin.x() : end.x();
    int y = origin.y() < end.y() ? origin.y() : end.y();

    //g_rubber->setGeometry(x, y, w, h);
    //QImage selectImage = bg.copy(x, y, w, h);

    // 动态显示选区大小及图片
    setSelectImageLabel(e);
    setLabel();
}
}

void ScreenShot::setSelectImageLabel(QMouseEvent *e)
{
int wid = abs(origin.x() - end.x());
int height = abs(origin.y() - end.y());
int x = origin.x() < end.x() ? origin.x() : end.x();
int y = origin.y() < end.y() ? origin.y() : end.y();

//设置标签显示内容e->globalPos() - dragPosition
//QImage selectImage = bg.copy(e->globalPos().x() - x, e->globalPos().y() - y, wid, height);
QImage selectImage = bg.copy(x, y, wid, height);
//QPixmap mp;
//mp = mp.fromImage(selectImage);
labelImage->setImageToLabel(selectImage);
//设置标签位置及大小
labelImage->setFixedSize(wid,height);
labelImage->move(QPoint(x, y));
labelImage->show();
}

void ScreenShot::mouseReleaseEvent(QMouseEvent *e)
{
//if (g_rubber)
{
    // 记录终点
    end = e->pos();
    //g_rubber->hide();
    // 截屏
    //grabScreen();
    // 截屏后关闭程序和标签栏
    //label->close();
    //labelImage->close();
    // 如果使用close(),当主窗口隐藏时,主窗口也会close(),如果你需要将他作为一个模块,使用hide而不是close
    //this->hide();

    int wid = abs(origin.x() - end.x());
    int height = abs(origin.y() - end.y());
    int x = origin.x() < end.x() ? origin.x() : end.x();
    int y = origin.y() < end.y() ? origin.y() : end.y();

    finalWidth = wid;
    finalHeight = height;
    finalX = x;
    finalY = y;

    _arrowBtn->move(x + wid - 8 * 54, y + height);
    _textEditBtn->move(x + wid - 7 * 54, y + height);
    _drawRoundBtn->move(x + wid - 6 * 54, y + height);
    _rectangleBtn->move(x + wid - 5 * 54, y + height);
    _drawLineBtn->move(x + wid - 4 * 54, y + height);
    _saveAsBtn->move(x + wid - 3 * 54, y + height);
    _cancelBtn->move(x + wid - 2 * 54, y + height);
    _confirmBtn->move(x + wid - 54, y + height);
    _textEditBtn->show();
    _arrowBtn->show();
    _drawRoundBtn->show();
    _rectangleBtn->show();
    _drawLineBtn->show();
    _saveAsBtn->show();
    _cancelBtn->show();
    _confirmBtn->show();

    rect = QRect(x, y, wid, height);
}
}
void ScreenShot::grabScreen()
{
// 调整要截取的区域
int wid = abs(origin.x() - end.x());
int height = abs(origin.y() - end.y());
int x = origin.x() < end.x() ? origin.x() : end.x();
int y = origin.y() < end.y() ? origin.y() : end.y();
// 获取程序当前路径,打片截图
//QString path;
//QDir dir;
//char szPath[MAX_PATH] = { 0 };
//path = dir.currentPath();
//FileStore::Instance()->GetUserImageDir(szPath);
//path = QString::fromLocal8Bit(szPath);
//QString picName = QFileDialog::getSaveFileName(this, qsl("保存图片"), path, tr("Images(*.jpg *.png *.bmp)"));
}

void ScreenShot::setLabel()
{
// 调整标签显示位置
int wid = abs(origin.x() - end.x());
int height = abs(origin.y() - end.y());
int x = origin.x() < end.x() ? origin.x() : end.x();
int y = origin.y() < end.y() ? origin.y() : end.y();

// 设置标签显示内容
QString str = qsl(" %1 x %2      ").arg(wid).arg(height);
label->setText(str);
// 设置标签位置
QRect rect(label->contentsRect());
label->move(QPoint(x, y - rect.height()));
label->show();
}

void ScreenShot::keyPressEvent(QKeyEvent *e)
{
// 如果按下ESC键,关闭程序
if (e->key() == Qt::Key_Escape)
{
    QFile::remove("bg.bmp");
    label->close();
    labelImage->close();
    //if (g_rubber)
    //g_rubber->close();
    // 如果使用close(),当主窗口隐藏时,主窗口也会close(),如果你需要将他作为一个模块,使用hide而不是close
    if (_cancelBtn)
    {
        _cancelBtn->hide();
        _saveAsBtn->hide();
        _drawLineBtn->hide();
        _rectangleBtn->hide();
        _textEditBtn->hide();
        _arrowBtn->hide();
        _drawRoundBtn->hide();
        _confirmBtn->hide();
    }
    this->hide();
}
}

void ScreenShot::setbackground(int width, int height)
{
//截取当前屏幕
QScreen *screen = QGuiApplication::primaryScreen();
bg = screen->grabWindow(0).toImage();

//读取背景图,等比例缩放RGB值,使背景变暗,进入截图模式
int red, green, blue;
QImage bg_blend(width, height, QImage::Format_RGB32);
for (int x = 0; x < width; x++)
{
    for (int y = 0; y < height; y++)
    {
        red = qRed(bg.pixel(x, y)) * 0.5;
        green = qGreen(bg.pixel(x, y)) * 0.5;
        blue = qBlue(bg.pixel(x, y)) * 0.5;
        bg_blend.setPixel(x, y, qRgb(red, green, blue));
    }
}
bg_gray = bg_blend;
// 将图片设置为背景
//QPalette   palette;
//palette.setBrush(this->backgroundRole(), QBrush(bg_blend));
//this->setPalette(palette);
}

void ScreenShot::paintEvent(QPaintEvent *e)
{
QPainter p(this);
QPixmap pixmapToShow = QPixmap::fromImage(bg_gray.scaled(size(), Qt::IgnoreAspectRatio));
p.drawPixmap(0, 0, pixmapToShow);
//QPainter paint(labelImage);
}

void ScreenShot::onclickSaveAsBtn()
{
labelImage->show();
QString picName = QFileDialog::getSaveFileName(this, qsl("保存图片"), qsl("UC截图") + QDateTime::currentDateTime().toString("yyyyMMddhhmmss") + ".png", qsl("Images(*.jpg *.png *.bmp)"));
QImage pic = labelImage->resultImage();
pic.save(picName);
closeAll();
}

void ScreenShot::onclickCancelBtn()
{
closeAll();
1
}

void ScreenShot::onclickConfirmBtn()
{
//QImage pic = bg.copy(finalX, finalY, finalWidth, finalHeight);
//QPixmap pic = pic.fromImage(labelImage->pixmap);
QImage pic = labelImage->resultImage();
if (App::main()->getMessagesWidget()->isVisible())
{
    App::main()->getMessagesWidget()->insertImageToInput(pic);
}
//把截取的图片放入系统剪切板
// QImage picture = bg.copy(finalX, finalY, finalWidth, finalHeight);
QMimeData *mimeData = new QMimeData();
mimeData->setImageData(pic);
QClipboard *clipBoard = QApplication::clipboard();
clipBoard->setMimeData(mimeData);

closeAll();
}

void ScreenShot::onClickDrawLineBtn()
{
labelImage->setDrawLineEnable();
1
}

void ScreenShot::onClickRectangleBtn()
{
labelImage->setRectangleEnable();
1
}

void ScreenShot::onClickTextEditBtn()
{
labelImage->setTextEditEnable();
1
}

void ScreenShot::onClickDrawRoundBtn()
{
labelImage->setRoundEnable();
1
}

void ScreenShot::setWindowNoState()
{
if (!(App::main()->getMessagesWidget()->isWindowShow()))
{
    App::wnd()->setWindowState(Qt::WindowNoState);
}
}

void ScreenShot::closeAll()
{
QFile::remove("bg.bmp");
label->close();
labelImage->close();
//g_rubber->close();
_saveAsBtn->close();
_drawLineBtn->close();
_rectangleBtn->close();
_textEditBtn->close();
_arrowBtn->close();
_drawRoundBtn->close();
_cancelBtn->close();
_confirmBtn->close();
this->hide();
setWindowNoState();
}

void ScreenShot::takeSnap()
{
// 获取屏幕尺寸
QDesktopWidget* desktopWidget = QApplication::desktop();
deskRect = desktopWidget->screenGeometry();
// 将窗体设置为屏幕尺寸,去掉标题栏
g_width = deskRect.width();
g_height = deskRect.height();
this->resize(g_width, g_height);
// 调用setbackground() 设置背景
setbackground(deskRect.width(), deskRect.height());
}
定义自己的QLabel用来显示截取的区域,并在QLabel上面完成图片编辑的功能。
typedef struct myLine{
QPoint startPoint;
QPoint endPoint;
}myLine;//用来存放画的线

typedef struct myRectangle{
QPoint startPoint;
QPoint endPoint;
}myRectangle;//矩形

typedef struct myRound{
QPoint startPoint;
QPoint endPoint;
}myRound;//圆

typedef struct myText{
QString mText;
QRect mRect;
//QPoint mPoint;
}myText;//编辑的文字

class QSLabel :public QLabel
{
Q_OBJECT

public:

QSLabel(QWidget* parent);
void mouseDoubleClickEvent(QMouseEvent *e);//双击截取的图片完成截图
void mouseMoveEvent(QMouseEvent *e);//使label可以拖动
void mousePressEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void paintEvent(QPaintEvent *e);
void setImageToLabel(const QImage &);
void setDrawLineEnable();
void setRectangleEnable();
void setRoundEnable();
void setTextEditEnable();
void setTextEditToVector();
QImage resultImage();
public slots:
void onTextChanged();

signals:
void onDoubleClick();

private:

QPoint dragPosition;
QPoint startPoint;//起点
QPoint endPoint;//终点
bool isPressed;//鼠标是否按下
QVector<myLine*> lines;//存放所有线段
QVector<myRectangle*> rectangles;//存放所有矩形
QVector<myRound*> rounds;//存放所有圆形
QVector<myText*> texts;//存放所有文本
QString text;//要在图片上写的字
QImage selectImage;
QTextEdit *m_plainTextEdit;//编辑文字输入框
bool isDrawLine;
bool isDrawRectangle;
bool isDrawRound;
bool isTextEdit;
};
方法实现:
QSLabel::QSLabel(QWidget* parent)
{
setMouseTracking(true);
isPressed = false;
isDrawLine = false;
isDrawRectangle = false;
isDrawRound = false;
isTextEdit = false;
m_plainTextEdit = new QTextEdit(this);
m_plainTextEdit->hide();
m_plainTextEdit->resize(60, 40);
QPalette pl = m_plainTextEdit->palette();
pl.setBrush(QPalette::Base, QBrush(QColor(255, 0, 0, 0)));
m_plainTextEdit->setPalette(pl);//设置textedit背景透明
//m_plainTextEdit->setAttribute(Qt::WA_TranslucentBackground);
connect(m_plainTextEdit, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
m_plainTextEdit->setStyleSheet(
    "QTextEdit{ border: 1px solid #dadada; }"
    "QTextEdit{font-family:'Microsoft YaHei'; font-size:14px;color:#ff0000;}"
    ""
    );
}

void QSLabel::mouseDoubleClickEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton)
{
    emit onDoubleClick();
}
}

void QSLabel::onTextChanged()
{
if (m_plainTextEdit->toPlainText().size() < 10)
{
    m_plainTextEdit->resize(m_plainTextEdit->toPlainText().size() * 10 + 50, 40);
}
else
{
    //m_plainTextEdit->resize(sqrt(m_plainTextEdit->toPlainText().size()) * 15 + 30, m_plainTextEdit->document()->size().rheight() + 10);
    m_plainTextEdit->resize(m_plainTextEdit->toPlainText().size() * 15 + 20, m_plainTextEdit->document()->size().rheight() + 10);
}

//QTextDocument *document = qobject_cast<QTextDocument*>(sender());
//m_plainTextEdit->document()->adjustSize();
//if (m_plainTextEdit->document())
//{
//    //m_plainTextEdit = qobject_cast<QTextEdit*>(m_plainTextEdit->document()->parent()->parent());
//    if (m_plainTextEdit)
//    {
//        int newheight = m_plainTextEdit->document()->size().rheight() + 10;
//        if (newheight != m_plainTextEdit->height())
//        {
//            m_plainTextEdit->setFixedHeight(newheight);
//        }
//    }
//}
}

void QSLabel::mouseMoveEvent(QMouseEvent *e)
{
if (isDrawLine || isDrawRectangle || isDrawRound || isTextEdit)
{
    setCursor(Qt::CrossCursor);
}
if (isPressed)
{
    if (isDrawLine)
    {
        endPoint = e->pos();

        myLine *line = new myLine;//把新线段放入vector中
        line->startPoint = startPoint;
        line->endPoint = endPoint;
        lines.push_back(line);
        startPoint = endPoint;
    }
    else if (isDrawRectangle || isDrawRound)
    {
        endPoint = e->pos();
    }
    update();
}
}

void QSLabel::mousePressEvent(QMouseEvent *e)
{
startPoint = e->pos();
endPoint = e->pos();
isPressed = true;

if (isTextEdit)
{
    if (m_plainTextEdit->toPlainText().size())
    {
        myText *text = new myText;//把文本放入vector中
        //text->mPoint = QPoint(m_plainTextEdit->x(), m_plainTextEdit->y());
        text->mRect = QRect(QPoint(m_plainTextEdit->x(), m_plainTextEdit->y()),QSize(m_plainTextEdit->width(), m_plainTextEdit->height()));
        text->mText = m_plainTextEdit->toPlainText();
        texts.push_back(text);
        update();
    }
    m_plainTextEdit->move(startPoint);
    m_plainTextEdit->show();
    m_plainTextEdit->clear();
}
}

void QSLabel::mouseReleaseEvent(QMouseEvent *e)
{
//setCursor(Qt::ArrowCursor);
isPressed = false;
if (isDrawRectangle)
{
    endPoint = e->pos();

    myRectangle *rectangle = new myRectangle;//把新矩形放入vector中
    rectangle->startPoint = startPoint;
    rectangle->endPoint = endPoint;
    rectangles.push_back(rectangle);
    update();
}
else if (isDrawRound)
{
    endPoint = e->pos();

    myRound *round = new myRound;//把新圆形放入QVector中
    round->startPoint = startPoint;
    round->endPoint = endPoint;
    rounds.push_back(round);
    update();
}
}

void QSLabel::paintEvent(QPaintEvent *e)
{
QPainter p(this);
p.drawImage(0, 0, selectImage);
p.setRenderHint(QPainter::Antialiasing);
QPen pen;//创建画笔
pen.setColor(Qt::red);
pen.setWidth(2);
//QPainter painter(&selectImage);
p.setPen(pen);
p.setFont(st::addFriend->f);

for (int i = 0; i < lines.size(); i++)
{
    myLine *line = lines[i];
    p.drawLine(line->startPoint, line->endPoint);
}
for (int j = 0; j < rectangles.size(); j++)
{
    myRectangle *rectangle = rectangles[j];
    int x1 = rectangle->startPoint.x() < rectangle->endPoint.x() ? rectangle->startPoint.x() : rectangle->endPoint.x();
    int y1 = rectangle->startPoint.y() < rectangle->endPoint.y() ? rectangle->startPoint.y() : rectangle->endPoint.y();
    p.drawRect(x1, y1, abs(rectangle->endPoint.x() - rectangle->startPoint.x()), abs(rectangle->endPoint.y() - rectangle->startPoint.y()));
}
for (int k = 0; k < rounds.size(); k++)
{
    myRound *round = rounds[k];
    int x2 = round->startPoint.x() < round->endPoint.x() ? round->startPoint.x() : round->endPoint.x();
    int y2 = round->startPoint.y() < round->endPoint.y() ? round->startPoint.y() : round->endPoint.y();
    p.drawEllipse(x2, y2, abs(round->endPoint.x() - round->startPoint.x()), abs(round->endPoint.y() - round->startPoint.y()));
}
for (int l = 0; l < texts.size(); l++)
{
    myText *text = texts[l];
    QRect rect = text->mRect;
    p.drawText(rect, Qt::TextWrapAnywhere, text->mText);//是绘制的文字在一个方框内TextWrapAnywhere切记
}
int xx = startPoint.x() < endPoint.x() ? startPoint.x() : endPoint.x();
int yy = startPoint.y() < endPoint.y() ? startPoint.y() : endPoint.y();
if (isDrawRectangle)
{
    p.drawRect(xx, yy, abs(endPoint.x() - startPoint.x()), abs(endPoint.y() - startPoint.y()));
}
else if (isDrawRound)
{
    p.drawEllipse(xx, yy, abs(endPoint.x() - startPoint.x()), abs(endPoint.y() - startPoint.y()));
}
QPoint points[4] = { QPoint(100, 100), QPoint(200, 100), QPoint(150, 200)};
p.drawPolygon(points, 3);
}

void QSLabel::setImageToLabel(const QImage &image)
{
selectImage = image;
lines.clear();
rectangles.clear();
rounds.clear();
texts.clear();
m_plainTextEdit->clear();
m_plainTextEdit->hide();
endPoint = QPoint(0, 0);
startPoint = QPoint(0, 0);
}

void QSLabel::setDrawLineEnable()
{
setTextEditToVector();
isDrawLine = true;
isDrawRectangle = false;
isDrawRound = false;
isTextEdit = false;
m_plainTextEdit->hide();
}

void QSLabel::setRectangleEnable()
{
setTextEditToVector();
isDrawLine = false;
isDrawRectangle = true;
isDrawRound = false;
isTextEdit = false;
m_plainTextEdit->hide();
}

void QSLabel::setRoundEnable()
{
setTextEditToVector();
isDrawLine = false;
isDrawRectangle = false;
isDrawRound = true;
isTextEdit = false;
m_plainTextEdit->hide();
}

void QSLabel::setTextEditEnable()
{
setTextEditToVector();
isDrawLine = false;
isDrawRectangle = false;
isDrawRound = false;
isTextEdit = true;
m_plainTextEdit->hide();
}

void QSLabel::setTextEditToVector()
{
if (isTextEdit&&m_plainTextEdit->toPlainText().size())
{
    myText *text = new myText;//把文本放入vector中
    text->mRect = QRect(QPoint(m_plainTextEdit->x(), m_plainTextEdit->y()), QSize(m_plainTextEdit->width(), m_plainTextEdit->height()));
    text->mText = m_plainTextEdit->toPlainText();
    texts.push_back(text);
    update();
}
}

QImage QSLabel::resultImage()
{
return QImage(QPixmap::grabWidget(this).toImage());
1
}
/
下面是使用:
connect(btn,SIGNAL(clicked()),this,SLOT(onClickBtn()));
void onClickBtn()
{
ScreenShot* instance = ScreenShot::Instance();
instance->takeSnap();
instance->show();
1

}
全文完。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值