文章目录
  1. 1. 功能实现
  2. 2. QGuiApplication类
    1. 2.1. 公有函数
    2. 2.2. 静态公有函数
  3. 3. QScreen类
    1. 3.1. 公有函数

屏幕截图是非常常用的功能,但是一直没有自己写过,现在使用QT实现非常简单的全屏截图。
屏幕截图主要使用了QGuiApplication类、QScreen类。
QGuiApplication类管理GUI应用程序的控制流和主设置。

功能实现

代码很简单,只有一个函数,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 界面截图
void MainWindow::widgetScreenshot()
{
// 获取屏幕类
QScreen *pScreen = QGuiApplication::primaryScreen();
// 获取第一个屏幕的图片
QPixmap mPixmap = pScreen->grabWindow(0);
// 获取系统图片目录
QString savePath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
// 设置名称为当前时间
savePath = QString( "%1/%2.png").arg(savePath).arg(QDateTime::currentDateTime().toString("yyyyMMddHHmmss"));
// 保存图片
qDebug() << "savePath" << savePath;
mPixmap.save(savePath);
}

截图放在了系统图片目录:
截图保存

下面详细介绍 QGuiApplication 类和 QScreen类。

QGuiApplication类

QGuiApplication类管理GUI应用程序的控制流和主设置。
QGuiApplication包含主事件循环,其中所有来自窗口系统和其他源的事件都被处理和发送。它还处理应用程序的初始化和终结,并提供会话管理。此外,QGuiApplication处理大多数系统范围和应用程序范围的设置。
对于使用Qt的任何GUI应用程序,无论应用程序在任何给定时间是否有0、1、2或更多窗口,都有一个QGuiApplication对象。对于非GUI Qt应用程序,使用QCoreApplication,因为它不依赖于Qt GUI模块。对于基于Qt的Qt应用程序,使用QApplication代替,因为它提供了创建QWidget实例所需的一些功能。
通过实例()函数访问QGuiApplication对象,该函数返回相当于全局qApp指针的指针。
QGuiApplication的主要职责范围是:

  • 它使用用户的桌面设置来初始化应用程序,例如palette()、font()和styleHints()。它跟踪这些属性,以防止用户在全局环境中更改桌面,例如通过某种控制面板。
  • 它执行事件处理,这意味着它从底层窗口系统接收事件并将它们分派给相关的小部件。您可以使用sendEvent()和postEvent()将您自己的事件发送到windows。
    它解析常见的命令行参数,并相应地设置其内部状态。
  • 它提供了通过 translate()对用户可见的字符串的本地化。
  • 它提供了一些像 clipboard()这样的神奇的对象。
  • 它知道应用程序的窗口。您可以使用topLevelAt()来询问哪个窗口位于某个位置,然后获取一个topLevelWindows()列表,等等。
  • 它管理应用程序的鼠标光标处理,见setOverrideCursor()
  • 它为复杂的会话管理提供支持。这使得应用程序可以在用户注销时优雅地终止,如果不可能终止关闭过程,甚至在将来的会话中保存整个应用程序的状态。查看issession恢复()、sessionId()和commitDataRequest()和saveStateRequest()以获取详细信息。
    由于QGuiApplication对象执行了这么多的初始化,所以必须在创建与用户界面相关的其他对象之前创建它。QGuiApplication还处理常见的命令行参数。因此,在对argv的任何解释或修改之前创建它通常是一个好主意。
公有函数
  1. qreal QGuiApplication::devicePixelRatio() const

返回系统中发现的最高屏幕设备像素比率。这是物理像素和设备独立像素之间的比率。只有你不知道你的目标窗口时,才使用此函数。如果知道目标窗口,则使用QWindow::devicePixelRatio()。

  1. bool QGuiApplication::isSavingSession() const

如果应用程序当前保存会话,则返回true;否则返回false。当commitDataRequest()和saveStateRequest()被释放时,这是正确的,但是当窗口随后被会话管理关闭时也是如此。

  1. bool QGuiApplication::isSessionRestored() const

如果应用程序已从较早的会话恢复,则返回true;否则返回false。

  1. QString QGuiApplication::sessionId() const

返回当前会话的标识。如果这个应用程序从较早的会话恢复,此标识与前一会话中的标识符相同。对于不同应用程序和同一应用程序的不同实例,会话标识符都是唯一的。

  1. QString QGuiApplication::sessionKey() const

在当前会话中返回密钥。如果应用程序从较早的会话中恢复,此键与前一会话结束时相同。每次保存会话时,会话密钥都会发生改变。如果关闭过程被取消,则在再次关闭会话时将使用另一会话密钥。

静态公有函数
  1. QWindowList QGuiApplication::allWindows()

返回应用程序中所有的窗口列表,如果程序没有窗口,列表为空。

  1. applicationDisplayName : QString

    QString applicationDisplayName()
    void setApplicationDisplayName(const QString &name)

此属性保存该应用程序的用户可见名称。如果没有设置,应用程序显示名称默认为应用程序名称。

  1. Qt::ApplicationState QGuiApplication::applicationState()

返回应用程序的当前状态。您可以对应用程序状态更改做出响应,以执行诸如停止/恢复cpu密集型任务、释放/加载资源或保存/恢复应用程序数据等操作。
状态如下:
应用状态 | 值 | 说明
———————— | ———- | ——-
Qt::ApplicationSuspended | 0x00000000 | 应用程序即将暂停。当进入这个状态时,应用程序应该保存它的状态,停止所有的活动,并准备好让代码执行停止。暂停时,应用程序可以在没有进一步警告的情况下随时被杀死(例如,当低内存迫使操作系统清除暂停的应用程序时)。
Qt::ApplicationHidden | 0x00000001 | 应用程序隐藏并在后台运行。这是需要进行后台处理的应用程序的正常状态,比如播放音乐,而用户与其他应用程序交互。在进入这个状态时,应用程序应该释放所有图形资源。
Qt::ApplicationInactive | 0x00000002 | 应用程序是可见的,但没有选择在前面。在桌面平台上,这通常意味着用户激活了另一个应用程序。在移动平台上,当操作系统用输入的呼叫或短信来打断用户时,进入这个状态更为常见。在这种状态下,考虑减少cpu密集型任务。
Qt::ApplicationActive | 0x00000003 | 应用程序是可见的,并且被显示在前面。

  1. void QGuiApplication::changeOverrideCursor(const QCursor &cursor)

更改当前活动的应用程序覆盖当前的光标。注意:如果没有调用setOverrideCursor(),则该函数没有效果。

  1. QClipboard *QGuiApplication::clipboard()

返回剪切板的交互对象

  1. desktopFileName : QString

    QString desktopFileName()
    void setDesktopFileName(const QString &name)

此属性保存此应用程序的桌面条目的基本名称。
这是一个文件名称,没有完整的路径,它是根据freedesktop desktop entry规范来表示这个应用程序的桌面条目。

  1. bool QGuiApplication::desktopSettingsAware()

如果Qt设置为使用系统的标准颜色、字体等,则返回true;否则返回false。默认是正确的。

  1. int QGuiApplication::exec()

进入主事件循环并等待直到exit()被调用,然后返回被设置为exit()的值(如果exit()调用exit(),则为0)。
需要调用此函数来启动事件处理。主事件循环从窗口系统接收事件,并将这些事件分派给应用程序小部件。
通常,在调用exec()之前不会发生用户交互。
为了使您的应用程序执行空闲处理,例如,在没有挂起事件的情况下执行一个特殊的函数,使用一个带有0超时的QTimer。可以使用processEvents()实现更高级的空闲处理方案。
我们建议您将清理代码连接到aboutToQuit()信号,而不是将其放入应用程序的main()函数中。这是因为,在某些平台上,QApplication::exec()调用可能不会返回。

  1. QObject *QGuiApplication::focusObject()

返回当前活动窗口中的QObject,该窗口将是与焦点相关的事件的最终接收方,例如关键事件。

  1. QWindow *QGuiApplication::focusWindow()

返回接收与焦点相关的事件的QWindow,例如关键事件。

  1. QFont QGuiApplication::font()

返回应用程序默认的字体

  1. QInputMethod *QGuiApplication::inputMethod()

返回输入的方法。输入方法返回有关虚拟键盘的状态和位置的属性。它还提供关于当前焦点输入元素位置的信息。

  1. bool QGuiApplication::isFallbackSessionManagementEnabled()

返回QGuiApplication是否将使用回退会话管理。
默认是正确的。如果这是真的,会话管理器允许用户交互,QGuiApplication将尝试在提交任务()后关闭顶层窗口。如果窗口不能关闭,会话关闭将被取消,应用程序将继续运行。

  1. Qt::KeyboardModifiers QGuiApplication::keyboardModifiers()

返回键盘上修饰符键的当前状态。当事件队列清空后,将自动更改键盘状态(QEvent::KeyPress和QEvent::KeyRelease事件),当前状态被同步更新。
应该注意的是,这可能并没有反映在调用时在输入设备上所持有的实际的键,而是在上述事件中最后一次报告的修饰符。如果没有密钥,Qt::NoModifier返回。

  1. QWindow *QGuiApplication::modalWindow()

返回最近显示的模式窗口。如果没有显示模式窗口,则该函数返回零。
模式窗口是一个窗口,它的modality属性设置为Qt::WindowModal或Qt::ApplicationModal。在用户可以继续使用程序的其他部分之前,必须关闭一个模式窗口。模式窗口是在堆栈中组织的。这个函数将返回堆栈顶部的模式窗口。

  1. Qt::MouseButtons QGuiApplication::mouseButtons()

返回鼠标上的按钮的当前状态。当前状态是同步更新的,因为事件队列清空了会自动改变鼠标状态的事件(QEvent: MouseButtonPress和QEvent::MouseButtonRelease事件)。

  1. QCursor *QGuiApplication::overrideCursor()

返回活动的应用程序覆盖光标。
如果没有定义应用程序光标,则该函数返回0。

  1. QPalette QGuiApplication::palette()

返回默认的应用程序调色板。

  1. QFunctionPointer QGuiApplication::platformFunction(const QByteArray &function)

从平台插件匹配函数返回一个函数指针。

  1. platformName : const QString

    QString platformName()

此属性包含底层平台插件的名称。QPA平台插件位于qtbase\src\plugins\platform中。支持如下平台:

  • android
  • cocoa(macOS)
  • directfb
  • eglfs(平台插件,它在EGL和OpenGL ES 2.0之上运行Qt5应用程序,而没有实际的窗口系统)
  • ios (也可以被使用tvOS)
  • kms(一个使用内核modesetting和DRM(直接呈现管理器)的实验性平台插件)
  • linuxfb
  • minimal (最小化是一个例子,可以使用该插件在没有GUI的环境中运行GUI应用程序)
  • minimalegl(插件例子)
  • offscreen
  • openwwfd
  • qnx
  • windows
  • xcb(普通桌面Linux平台上使用的X11插件)
  1. QPlatformNativeInterface *QGuiApplication::platformNativeInterface()

返回平台的本机接口,用于平台特定功能。

  1. QScreen * const

    QScreen primaryScreen()
    信号:
    void primaryScreenChanged(QScreen
    screen)

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

  1. Qt::KeyboardModifiers QGuiApplication::queryKeyboardModifiers()

查询并返回键盘上修饰符键的状态。与keyboardmodifier不同,该方法返回在调用该方法时保存在输入设备上的实际密钥。它不依赖于此进程接收到的按键事件,这使得在移动窗口时检查修饰符成为可能。
注意,在大多数情况下,您应该使用keyboardModifiers(),因为它包含了修饰符的状态,因为它包含了当前处理的事件时的状态。

  1. QList screens()

返回与应用程序连接的窗口系统相关的所有屏幕的列表。

QScreen类

公有函数
  1. int QScreen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b) const

方便函数计算旋转角度,从旋转a到旋转b。
Qt::ScreenOrientation枚举类型指定屏幕可能具有的各种方向,具体如下:
类型 | 值 | 说明
———————— | ———- |——
Qt::PrimaryOrientation | 0x00000000 | 显示的主要取向。
Qt::LandscapeOrientation | 0x00000002 | 景观朝向,显示宽度大于显示高度。
Qt::PortraitOrientation | 0x00000001 | 人像定位,显示高度大于显示宽度,相对于景观顺时针旋转90度。
Qt::InvertedLandscapeOrientation | 0x00000008 | 倒转的景观朝向,相对于景观旋转180度。
Qt::InvertedPortraitOrientation | 0x00000004 | 倒置的人像方向,旋转180度相对于人像。

  1. availableGeometry : const QRect

    QRect availableGeometry() const
    信号:
    void availableGeometryChanged(const QRect &geometry)

此属性以像素为单位保存屏幕可用的几何图形。
可用的几何图形是不包括窗口管理器保留区域的几何图形,如任务栏和系统菜单。

  1. availableSize : const QSize

    QSize availableSize() const
    信号:
    void availableGeometryChanged(const QRect &geometry)

此属性以像素为单位保存屏幕的可用大小。
可用的大小是不包括窗口管理器预留区域(如任务栏和系统菜单)的大小。

  1. availableVirtualGeometry : const QRect

    QRect availableVirtualGeometry() const
    信号:
    void virtualGeometryChanged(const QRect &rect)

此属性保存该屏幕所属的虚拟桌面的可用几何图形。
返回与此屏幕对应的虚拟桌面的可用几何图形。
这是虚拟兄弟姐妹的单个可用几何图形的联合。

  1. availableVirtualSize : const QSize

    QSize availableVirtualSize() const
    信号:
    void virtualGeometryChanged(const QRect &rect)

此属性保存该屏幕所属的虚拟桌面的可用大小。
返回与此屏幕对应的虚拟桌面的可用像素大小。
这是虚拟兄弟的单个可用几何图形的组合大小。

  1. depth : const int

    int depth() const

此属性保存屏幕的颜色深度

  1. devicePixelRatio : const qreal

    qreal devicePixelRatio() const
    信号:
    void physicalDotsPerInchChanged(qreal dpi)

此属性保存物理像素和与设备无关的像素之间的屏幕比值。
返回屏幕的物理像素与设备独立像素之间的比率。
普通的数值是1.0在正常显示和2.0在“视网膜”显示。更高的值也是可能的。

  1. geometry : const QRect

    QRect geometry() const
    信号:
    void geometryChanged(const QRect &geometry)

此属性以像素为单位保存屏幕的几何图形。

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

创建并返回一个由QRect(x, y, width, height)限制的给定窗口内容所构建的像素图。
参数(x, y)指定窗口中的偏移量,而(宽度、高度)指定要复制的区域。如果宽度为负,函数将所有内容复制到窗口的右边框。如果高度为负,则函数将所有内容复制到窗口的底部。
可以使用QWidget: winId()函数检索窗口系统标识符。使用窗口标识符而不是QWidget的基本原理是启用不属于应用程序、窗口系统框架等的窗口。

  1. QPlatformScreen *QScreen::handle() const

获取平台屏幕手柄

  1. bool QScreen::isLandscape(Qt::ScreenOrientation o) const

如果o是横景或倒景,则返回真值的便利函数;否则返回false。

  1. bool QScreen::isPortrait(Qt::ScreenOrientation o) const

如果o是竖式或倒立式,则返回true的便利函数;否则返回false。

  1. logicalDotsPerInch : const qreal

    qreal logicalDotsPerInch() const
    信号:
    void logicalDotsPerInchChanged(qreal dpi)

此属性保存每英寸逻辑点或像素的数量。
此值可用于将字体点大小转换为像素大小。
这是一个方便的属性,就是logicalDotsPerInchX和logicalDotsPerInchY属性的平均值。

  1. logicalDotsPerInchX : const qreal

    qreal logicalDotsPerInchX() const
    信号:
    void logicalDotsPerInchChanged(qreal dpi)

此属性保存水平方向上每英寸逻辑点或像素的数量。
此值用于将字体点大小转换为像素大小。

  1. logicalDotsPerInchY : const qreal

    qreal logicalDotsPerInchY() const
    信号:
    void logicalDotsPerInchChanged(qreal dpi)

此属性保存垂直方向上每英寸逻辑点或像素的数量。
此值用于将字体点大小转换为像素大小。

  1. QRect QScreen::mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &rect) const

在两个屏幕朝向之间绘制矩形。

  1. name : const QString

    QString name() cons

此属性包含表示屏幕的用户外观字符串。
例如,在X11上,它们对应于XRandr屏幕名称,通常是“VGA1”、“HDMI1”等。

  1. nativeOrientation : const Qt::ScreenOrientation

    Qt::ScreenOrientation nativeOrientation() const

此属性保存本机屏幕定向。
屏幕的本机方向是设备的logo标签以正确的方式出现的方向,或者Qt: PrimaryOrientation(如果平台不支持这个功能的话)。本机方向是硬件的属性,不会改变。

  1. orientation : const Qt::ScreenOrientation

    Qt::ScreenOrientation orientation() const
    信号:
    void orientationChanged(Qt::ScreenOrientation orientation)

此属性保存屏幕方向。
屏幕方向表示显示的物理方向。例如,移动设备的屏幕方向会根据手持方式而改变。对方向的更改可能会也可能不会触发对屏幕主方向的更改。
对该属性的更改将通过orientationUpdateMask()进行过滤,因此为了接收方向更新,应用程序必须首先调用setOrientationUpdateMask(),并使用希望接收的方向的掩码。

  1. Qt::ScreenOrientations QScreen::orientationUpdateMask() const

返回当前设置的方向更新掩码。

  1. physicalDotsPerInch : const qreal

    qreal physicalDotsPerInch() const
    信号:
    void physicalDotsPerInchChanged(qreal dpi)

此属性保存每英寸的物理点或像素个数。
这个值表示屏幕显示的像素密度。根据底层系统提供的信息,价值可能不是完全准确的。
这是一种便利性质它只是物理和物理的平均性质。

  1. physicalDotsPerInchX : const qreal

    qreal physicalDotsPerInchX() const
    信号:
    void physicalDotsPerInchChanged(qreal dpi)

这个属性包含水平方向上每英寸的物理点或像素的数量。
这个值表示屏幕显示的实际水平像素密度。根据底层系统提供的信息,价值可能不是完全准确的。

  1. physicalDotsPerInchY : const qreal

    qreal physicalDotsPerInchY() const
    信号:
    void physicalDotsPerInchChanged(qreal dpi)

这个属性包含垂直方向上每英寸的物理点或像素的数量。
这个值表示屏幕显示的实际水平像素密度。根据底层系统提供的信息,价值可能不是完全准确的。

  1. physicalSize : const QSizeF

    QSizeF physicalSize() const
    信号:
    void physicalSizeChanged(const QSizeF &size)

此属性保存屏幕的物理大小(以毫米为单位)。
物理大小表示屏幕显示的实际物理尺寸。
根据底层系统提供的信息,价值可能不是完全准确的。

  1. primaryOrientation : const Qt::ScreenOrientation

    Qt::ScreenOrientation primaryOrientation() const
    信号:
    void primaryOrientationChanged(Qt::ScreenOrientation orientation)

此属性保留主屏幕方向。
如果屏幕几何图形的宽度大于或等于它的高度,则主屏幕方向为Qt::LandscapeOrientation方向,否则则为 Qt::PortraitOrientation。当屏幕方向改变时(例如,当显示被旋转时),这个属性可能会改变。但是,这种行为是与平台相关的,通常可以在应用程序清单文件中指定。

  1. refreshRate : const qreal

    qreal refreshRate() const
    信号:
    void refreshRateChanged(qreal refreshRate)

此属性保存Hz中屏幕的大致垂直刷新速度。

  1. void QScreen::setOrientationUpdateMask(Qt::ScreenOrientations mask)

设置应用程序感兴趣的接收与此屏幕相关的更新的方向。

  1. size : const QSize

    QSize size() const
    信号:
    void geometryChanged(const QRect &geometry)

此属性保存屏幕的像素分辨率。

  1. QTransform QScreen::transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &target) const

方便函数,用于计算从定位a定义的坐标系映射到定位b和目标维目标定义的坐标系的变换。

  1. virtualGeometry : const QRect

    QRect virtualGeometry() const
    信号:
    void virtualGeometryChanged(const QRect &rect)

此属性保存该屏幕所属的虚拟桌面的像素几何。
返回与此屏幕对应的虚拟桌面的像素几何。
这是虚拟桌面的各个几何图形的联合。

  1. QList QScreen::virtualSiblings() const

获取屏幕的虚拟桌面。

文章目录
  1. 1. 功能实现
  2. 2. QGuiApplication类
    1. 2.1. 公有函数
    2. 2.2. 静态公有函数
  3. 3. QScreen类
    1. 3.1. 公有函数