简易版截图工具

前两天学习了绘图,就想着做个截图工具练练手。
首先先想一下思路:
如何隐藏主窗口?
1.使用定时器延时1s
2.发送信号
hide()
如果隐藏完毕发送信号
接受信号后保存截图

1.全屏截图

  // 保存整个屏幕为QPixmap
    QScreen *screen = QGuiApplication::primaryScreen();
    fullarea = screen->grabWindow(0);

2.区域截图
1、触发截图(快捷键或单击图标)
2、截取全屏画面
3、显示画布,去窗口表框
画布全屏:
hua.showFullScreen();//全屏显示
画布置顶:setWindowFlags(Qt::WindowStaysOnTopHint); //窗口置顶

4、通过重写鼠标和绘图函数来达到显示鼠标拖动区间,
5、截取鼠标拖动区间图案,弹出保存选项
6、退出
下面是效果图:
在这里插入图片描述
功能可全屏截图,可区域截图,用了定时器来实现隐藏窗口延时。
全屏截图代码:

void Widget::on_pushButton_clicked()//全屏截图
{
    if(ui->checkBox->isChecked())//如果隐藏
    {
        this->hide();

        if(timer->isActive()==false)
        {
            timer->start(1000);//隐藏后延迟1s
        }
    }
    else//不隐藏
    {
        fulljietu();//抓屏
        savepicture();  //保存
    }


}

区域截图代码:
用鼠标事件和绘图事件进行裁剪

//按下鼠标
void huabu::mousePressEvent(QMouseEvent *e)
{

    if(e->button()&Qt::LeftButton)
    {
        mStartPoint=e->pos();//
        repaint();

    }
}
//移动鼠标
void huabu::mouseMoveEvent(QMouseEvent *e)
{
        mEndPoint=e->pos();
        repaint();

}

//释放鼠标
void huabu::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button()&Qt::LeftButton)
    {
        mEndPoint=e->pos();
        GetScreenShot();//裁剪
//        repaint();


    }
}
void huabu::GetScreenShot()//裁剪
{
    regionarea = fullarea.copy(mStartPoint.x(),mStartPoint.y(),
      mEndPoint.x() - mStartPoint.x(),mEndPoint.y()-mStartPoint.y());
    QString savepath=QFileDialog::getSaveFileName(
                this,
                "保存",
                "../",
                "PNG Files(*.png);;JPG Files(*.jpg);");


    qDebug()<<savepath;
    if(!regionarea.save(savepath))
    {
        qDebug()<<"save failed";
        close();

    }else
    {
        qDebug()<<"save success";
        close();
     }



}



void huabu::paintEvent(QPaintEvent *)
{

    QPainter p(this);
    p.drawPixmap(0,0,width(),height(),fullarea);
    QPen pen(Qt::blue);
    p.setPen(pen);
    p.drawRect(QRect(mStartPoint, mEndPoint) );

//******************************************向日葵头像
 //   QPainter p(this);//创建画家对象
 //   p.drawPixmap(180,70,150,150,QPixmap("../image/01.png"));



}

存在代码优化还没完成
保存图片的代码重复了,可以写一个信号去调用
还有什么问题,欢迎大家提出交流!!!

项目我已经上传了
下面是项目代码链接:
https://download.csdn.net/download/weixin_44353958/11601868

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值