介绍一下截图工具的使用方法:
S开始截图
双击鼠标,开始截图,此时已经选中全部屏幕
拖拽左键选择区域,
在边上可以延展选择范围
点中间可以拖拽选中区域的位置。
右键保存
中间键清楚选区
P暂停截图
C关闭程序
1)首先在设计时,首先面临的第一个问题就是如何截图:
这是如何解决的呢?
QScreen *screen = QGuiApplication::primaryScreen();
// //获取全屏截图
QPixmap p= screen->grabWindow(QApplication::desktop()->winId(),x,y,width,height);
//x,y,width,height都是自己设置的大小
2)截图时会有Winget窗口等的影响,因为运行时关闭窗口就无法,操作功能,所以需要让我们看不到窗口。
.cpp中需要写的
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_NoSystemBackground);
setAttribute(Qt::WA_TranslucentBackground);
cacheMap = new QPixmap(this->size());
cacheMap->fill(QColor(0, 0, 0, 1));
.cpp中重写的画图需要加的
QPainter qq(this);
qq.drawPixmap(0, 0, *cacheMap);
并且最重要的是记得把项目中ui的winget窗口拉大,超过屏幕的大小,这样才能接受鼠标事件。
3)当截图完成又不想退出程序,应该如何才能不影响操作别的软件的操作。
把窗口设计小了;
this->resize(1,1);
4)鼠标事件如何设置呢?直接帖代码
void Widget::mouseDoubleClickEvent ( QMouseEvent * ){
if(starting==false)
{
starting=true;
sScreenShot=true;
QScreen *screen = QGuiApplication::primaryScreen();
//获取全屏截图
selectBox.setRect(0,0,1920,1080);
selectPicture= screen->grabWindow(QApplication::desktop()->winId(),0,0,1920,1080);
update();
clickTwo=true;
}
}
void Widget::mousePressEvent(QMouseEvent *event)
{
QString btn;
if(event->button() == Qt::LeftButton)
{
if(buttonLeft)
{
startPosition.setX(event->x());
startPosition.setY(event->y());
selectBox.setX(event->x());
selectBox.setY(event->y());
update();
flag=0;
//buttonLeft=false;
}
if(flag==0&&buttonMove==false&&buttonLeft==false){
left=event->x()-startPosition.x();
top=event->y()-startPosition.y();
widthMove=endPosition.x()-startPosition.x();
hightMove=endPosition.y()-startPosition.y();
flag=1;
}
btn = "LeftButton";
}
else if(event->button() == Qt::RightButton)
{
pictureSave();
sScreenShot=false;
this->resize(1,1);
}
else if(event->button() == Qt::MidButton)
{
selectBox=QRect(0,0,0,0);
update();
clickTwo=false;
sScreenShot=false;
starting=false;
buttonLeft=true;
buttonMove=true;
num=0;
flag=0;
btn = "MidButton";
}
}
void Widget::execute()
{
emit backSignal();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(buttonMove)
{
selectBox.setWidth(event->x()-startPosition.x());
selectBox.setHeight(event->y()-startPosition.y());
endPosition.setX(event->x());
endPosition.setY(event->y());
buttonLeft=false;
update();
}else if(event->x()>startPosition.x()-10&&event->x()<startPosition.x()+10&&event->y()>startPosition.y()-10&&event->y()<startPosition.y()+10)
{
selectBox.setX(event->x());
selectBox.setY(event->y());
startPosition.setX(event->x());
startPosition.setY(event->y());
update();
}
else if(event->x()>endPosition.x()-10&&event->x()<endPosition.x()+10&&event->y()>endPosition.y()-10&&event->y()<endPosition.y()+10)
{
selectBox.setWidth(event->x()-startPosition.x());
selectBox.setHeight(event->y()-startPosition.y());
endPosition.setX(event->x());
endPosition.setY(event->y());
update();
}else if(event->x()>endPosition.x()-10&&event->x()<endPosition.x()+10&&event->y()>startPosition.y()-10&&event->y()<startPosition.x()+10)
{
startPosition.setY(event->y());
endPosition.setX(event->x());
selectBox.setX(startPosition.x());
selectBox.setY(startPosition.y());
selectBox.setWidth(endPosition.x()-startPosition.x());
selectBox.setHeight(endPosition.y()-startPosition.y());
update();
}else if(event->x()>startPosition.x()-10&&event->x()<startPosition.x()+10&&event->y()>endPosition.y()-10&&event->y()<endPosition.x()+10)
{
startPosition.setX(event->x());
endPosition.setY(event->y());
selectBox.setX(startPosition.x());
selectBox.setY(startPosition.y());
selectBox.setWidth(endPosition.x()-startPosition.x());
selectBox.setHeight(endPosition.y()-startPosition.y());
update();
}
else if(event->x()>startPosition.x()&&event->y()>startPosition.y()&&event->x()<endPosition.x()&&event->y()<endPosition.y()&&buttonMove==false&&flag==1)
{
selectBox.setX(event->x()-left);
selectBox.setY(event->y()-top);
startPosition.setX(event->x()-left);
startPosition.setY(event->y()-top);
endPosition.setX(startPosition.x()+selectBox.width());
endPosition.setY(startPosition.y()+selectBox.height());
selectBox.setWidth(widthMove);
selectBox.setHeight(hightMove);
update();
}
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
flag=0;
if(clickTwo&&num>0)
{
if(startPosition.x()>endPosition.x())
{
int temp=startPosition.x();
startPosition.setX(endPosition.x());
endPosition.setX(temp);
}
if(startPosition.y()>endPosition.y())
{
int temp=startPosition.y();
startPosition.setY(endPosition.y());
endPosition.setY(temp);
}
selectBox.setX(startPosition.x());
selectBox.setY(startPosition.y());
selectBox.setWidth(endPosition.x()-startPosition.x());
selectBox.setHeight(endPosition.y()-startPosition.y());
buttonMove=false;
}
if(clickTwo)
{
num++;
}
}
键盘输入的代码设计:
void Widget::keyPressEvent(QKeyEvent *event)
{
if(event->key()==Qt::Key_S)
{
this->resize(1920,1080);
}
if(event->key()==Qt::Key_P)
{
this->resize(1,1);
}
if(event->key()==Qt::Key_C)
{
this->close();
}
}
最终软件下载地址:https://download.csdn.net/download/qq_43187232/20082597