截图软件03

来源:互联网 发布:化纤衣服危害 知乎 编辑:程序博客网 时间:2024/06/05 19:06

写在前面:

这部分主要理解剩下的几个成员函数的作用。

void Screenshot::shootScreen()

void Screenshot::shootScreen(){    QScreen *screen = QGuiApplication::primaryScreen();//指针 指向当前应用程序的屏幕    if (const QWindow *window = windowHandle())//如果当前窗口的背景存在        screen = window->screen();//就将当前的应用程序的屏幕指针指向这个背景    if (!screen)//背景为空则返回        return;    if (delaySpinBox->value() != 0)        QApplication::beep();//只要延迟不为0 就发出滴的一声    originalPixmap = screen->grabWindow(0);//创建并抓取给定大小的像素图 默认抓取全部    updateScreenshotLabel();//更新预览    newScreenshotButton->setDisabled(false); //新的预览设置成功之后 新建按钮 不在阻塞    if (hideThisWindowCheckBox->isChecked())        show();//将当前的窗口再次显示}

QScreen Class

QScreen类用于查询屏幕属性
派生自QObject类
关于每英寸逻辑与物理点数的说明:物理DPI基于实际可用的物理像素大小,对于打印预览以及需要了解屏幕显示内容的确切物理尺寸的其他情况非常有用。
每英寸的逻辑点用于将字体和用户界面元素从点的大小转换为像素的大小,可能与每英寸的物理点不同。 每英寸的逻辑点数有时可由用户在桌面环境的设置面板中设置,以让用户在不同的应用程序中全局控制用户界面和字体大小。

QGuiApplication Class

派生自QCoreApplication
QGuiApplication类管理GUI应用程序的控制流程和主要设置。
QGuiApplication包含主事件循环,来自窗口系统和其他源的所有事件都被处理和分派。 它还处理应用程序的初始化和完成,并提供会话管理。 此外,QGuiApplication处理大部分系统范围和应用程序范围的设置。

对于任何使用Qt的GUI应用程序,只要有一个QGuiApplication对象,无论应用程序在任何给定时间是否有0,1,2或更多的窗口。 对于非GUI Qt应用程序,请使用QCoreApplication,因为它不依赖于Qt GUI模块。 对于基于QWidget的Qt应用程序,请使用QApplication,因为它提供了创建QWidget实例所需的一些功能。

QGuiApplication对象可以通过instance()函数访问,该函数返回一个相当于全局qApp指针的指针。

QGuiApplication的主要职责是:它使用用户的桌面设置(如palette(),font()和styleHints())初始化应用程序。它会跟踪这些属性,以防用户在全局范围内更改桌面,例如通过某种控制面板。它执行事件处理,意味着它从底层窗口系统接收事件,并将它们分派到相关的小部件。您可以使用sendEvent()和postEvent()将自己的事件发送到窗口。它解析常见的命令行参数并相应地设置其内部状态。有关更多详细信息,请参阅下面的构造器文档它提供了通过translate()对用户可见的字符串的本地化。它提供了一些像剪贴板()这样的魔法对象。它知道应用程序的窗口。你可以使用topLevelAt()来询问哪个窗口在某个位置,获得topLevelWindows()的列表等等。它管理应用程序的鼠标光标处理,请参阅setOverrideCursor()它为复杂的会话管理提供支持。这使得应用程序可以在用户注销时正常终止,如果终止不可行则取消关闭过程,甚至保留整个应用程序的状态以用于将来的会话。有关详细信息,请参阅isSessionRestored(),sessionId()和commitDataRequest()和saveStateRequest()。
primaryScreen : QScreen * const

该属性包含应用程序的主要(或默认)屏幕。
这将是QWindows最初显示的屏幕,除非另有说明。

QWindow Class

Inherits: QObject and QSurface
QWindow类表示底层窗口系统中的一个窗口
提供父窗口的窗口变成其父窗口的本地子窗口。

QWindow *QWidget::windowHandle() const

如果这是一个本地小部件,则返回关联的QWindow。 否则返回null。
原生小部件包括顶级小部件,QGLWidget和调用winId()的子小部件。

QScreen *QWindow::screen() const

返回显示窗口的屏幕,如果没有,则返回null。
对于子窗口,这将返回相应顶层窗口的屏幕。

[static] void QApplication::beep()

听起来,使用默认的音量和声音的钟声。 该功能在Qt for Embedded Linux中不可用。

QPixmap QScreen::grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1)

创建并返回通过抓取由QRect(x,y,width,height)限制的给定窗口内容构造的像素图。

参数(x,y)指定窗口中的偏移量,而(宽度,高度)指定要复制的区域。如果宽度为负数,则该函数将所有内容复制到窗口的右边界。如果高度为负数,则该函数将所有内容复制到窗口的底部。窗口系统标识符(WId)可以使用QWidget :: winId()函数进行检索。使用窗口标识符而不是QWidget的基本原理是启用对不属于应用程序的窗口的抓取,窗口系统框架等等。警告:在iOS等系统上不支持应用程序不包含的窗口,沙盒/安全防止读取不属于应用程序的窗口的像素。grabWindow()函数从屏幕抓取像素,而不是从窗口获取像素,即如果在抓取的那个窗口上部分或全部存在另一个窗口,则也会从上面的窗口获取像素。鼠标光标一般不会被抓取。请注意,如果给定窗口的深度与根窗口的深度不同,并且另一个窗口部分或完全遮挡了您抓取的窗口,则不会从上面的窗口获取像素。像素图中被遮挡的区域的内容将是未定义的并且未初始化。在Windows Vista和更高版本中,抓取通过设置Qt :: WA_TranslucentBackground属性创建的分层窗口将不起作用。而是抓住桌面小部件应该工作。警告:一般来说,抓住屏幕外的区域是不安全的。这取决于底层的窗口系统。

这个成员函数就是实现绑定背景 并且抓取背景的功能
并且根据延迟时间 发出声音提示
在延迟结束之后更新预览 还原按钮 。。。。

原创粉丝点击