您的位置:首页 > 科技 > IT业 > 简述如何优化网站的方法_网上营销的概念_什么是软文_seo效果分析

简述如何优化网站的方法_网上营销的概念_什么是软文_seo效果分析

2024/12/26 20:12:51 来源:https://blog.csdn.net/m0_65143871/article/details/144385404  浏览:    关键词:简述如何优化网站的方法_网上营销的概念_什么是软文_seo效果分析
简述如何优化网站的方法_网上营销的概念_什么是软文_seo效果分析

目录

引入信号和槽

截图

捕获信号

渲染截图

 显示截图


创建一个sinpasteApp类,使其继承自object。我们在这个类内进行封装截图功能:

 此时创建完成之后会生成一个sinpasteapp.h和sinpasteapp.cpp文件:

接下来我们需要创建一个系统托盘,我们点击这个托盘的时候上面会弹出一个菜单,上面显示一个截图和退出菜单选项。

在main.cpp内定义我们创建的sinpasteApp类实例,这样就会自动调sinpasteapp.h和cpp文件了:

 main.cpp

在sinpasteapp.h文件建一个托盘对象:

sinpasteapp.h

#include<QSystemTrayIcon>  //系统托盘
class sinpasteApp : public QObject
{
.......
private:QSystemTrayIcon sysMeun;  //定义托盘对象
};

sinpasteapp.h内构造时动态分配托盘对象,动态分配的目的是为了让托盘不会一直存在,直到程序结束。

sinpasteapp.cpp


sinpasteApp::sinpasteApp(QObject *parent): QObject{parent},sysMeun(new QSystemTrayIcon(this))  //动态分配托盘
{}

在构造时设置一下托盘图标:

sinpasteapp.cpp

    sinpasteApp::sinpasteApp(QObject *parent): QObject{parent},   sysMeun(new QSystemTrayIcon(this))
{this->sysMeun->setIcon(QIcon(":/images/logo.png"));this->sysMeun->show();
}

给托盘设置菜单:

sinpasteapp.h

#include<QMenu>class sinpasteApp : public QObject
{
.......
private:void initSysMenu();
}

定义:

sinpasteapp.cpp

//初始化菜单
void sinpasteApp::initSysMenu()
{QMenu* menu=new QMenu;menu->addAction("截图");menu->addAction("退出");this->sysMeun->setContextMenu(menu);
}

调用

sinpasteapp.cpp

sinpasteApp::sinpasteApp(QObject *parent): QObject{parent},sysMeun(new QSystemTrayIcon(this))
{this->sysMeun->setIcon(QIcon(":/images/logo.png"));initSysMenu();this->sysMeun->show();
}

引入信号和槽

我们需要点击菜单退出实现退出功能,点击截图实现截图功能。其中退出功能直接调用系统的quit()函数,截图由我们自己封装函数去实现具体截图功能。

 
qApp就是一个应用程序对象,我们调quit()会用到了qapplication,qapplication在main函数被创建,是单例的,我们要想访问它只能通过qApp去访问。

截图

sinpasteapp.h

public slots:void  grapsScreen();

sinpasteapp.cpp

//截图
void sinpasteApp::grapsScreen()
{  QList<QScreen*>screens=qApp->screens();  //获取显示器数量if(screens.empty()){qDebug("没有获取到显示器");return;}auto curpos=QCursor::pos();  //获取鼠标位置QPixmap pix;for(auto screen:screens){QRect rect=screen->geometry();  //获取显示器矩形区域if(rect.contains(curpos))  //如果显示器内包含鼠标{pix=screen->grabWindow();  //把截图保存到pix变量}}if(pix.isNull()){qDebug()<<"截图为空";return;}emit shotFinished(pix);  //把截图发送给显示截图槽函数
}

我们截图的内容在widget窗口显示出来:

捕获信号

sinpasteapp.h

创建一个Widget类型的指针: 

#include"widget.h"class sinpasteApp : public QObject
{
......
private:Widget* view;
}

构造时给view分配内存:

sinpasteApp::sinpasteApp(QObject *parent): QObject{parent},view(new Widget()),sysMeun(new QSystemTrayIcon(this))
{
.......connect(this,&sinpasteApp::shotFinished,this->view,&Widget::showPix);//发起信号者             发送的槽函数         接收者        接收槽函数    
}

渲染截图

渲染需要重写虚函数paintEvent()。

Widget.h

#include<QPaintEvent>class Widget : public QWidget
{Q_OBJECT......
protected:void paintEvent(QPaintEvent* event);}

Widget.cpp

#include<QPainter>void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);if(!this->windowPix.isNull()){painter.drawPixmap(this->rect(),this->windowPix);  //第一个参数为要绘制的区域(这里我们传屏幕的矩形区域),第二个参数为要绘制的东西,这里我们传之前保存的截图}
}

 显示截图

 void Widget:: showPix(QPixmap pix)
{this->windowPix=pix;this->show();
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com