【问题标题】:How can I find the screen/desktop size in Qt, so I can display a desktop notification?如何在 Qt 中找到屏幕/桌面大小,以便显示桌面通知?
【发布时间】:2013-09-29 07:44:11
【问题描述】:

我想在桌面右下角编写一个通知窗口,这样当有人上线时,它就像 Skype 通知一样工作。有人可以帮我获取桌面的屏幕尺寸,以便我可以使用我的 Qt 应用程序将通知窗口放在右下角吗?

【问题讨论】:

标签: qt


【解决方案1】:

您可以使用QDesktopWidget

 QRect rec = QApplication::desktop()->screenGeometry();
 height = rec.height();
 width = rec.width();

【讨论】:

  • 小心——最好使用 available 几何:doc.qt.io/qt-5/qdesktopwidget.html#availableGeometry
  • 我想您可能对 QDesktopWidget::size() 方法感兴趣:对我来说,这将返回堆叠在一起的两个显示器的大小,因为它们在显示设置中进行了配置。调用“screenGeometry”只会给出一台显示器的尺寸。
  • 正如文档中所写,QDesktopWidget 类被标记为过时,并且可能会在下一个主要版本中被弃用,所以现在最好使用 QScreen 类,即使这个不太方便
  • screenGeomoetry() 现在被标记为过时。现在首选的方法是: QGuiApplication::screens()[0]->size().width()
  • QApplication::desktop()->screenGeometry() 已弃用,请改用QGuiApplication::primaryScreen()->size()
【解决方案2】:

QScreen 类(自 Qt 5.0 起)提供有关屏幕大小(逻辑和物理)、方向和更改信号的信息。

QScreen *screen = QGuiApplication::primaryScreen();
QRect  screenGeometry = screen->geometry();
int height = screenGeometry.height();
int width = screenGeometry.width();

更新:

  • 多屏配置请使用QList <QScreen*> screens = QGuiApplication::screens();
  • 方向(包括多屏)请使用screen->orientation()和(Qt 5.2起)screen->nativeOrientation()

【讨论】:

  • 这种方法是否也适用于 Android 和 Linux(桌面/嵌入式)中 QML 页面的条件加载(例如,针对不同屏幕分辨率/方向的不同 QML 页面)?
  • 首选此选项,因为 QApplication::desktop() 已过时 (doc.qt.io/qt-5/qdesktopwidget.html)
  • 当前屏不是主屏怎么办?我的窗口出现在纵向模式显示器上,但似乎 primaryScreen 指的是主显示器,即横向。
  • @KernelPanic 可用于条件加载 QML/渲染。动态硬件配置请查看QGuiApplication(doc.qt.io/qt-5/qguiapplication.html)的primaryScreenChanged / screenAdded / screenRemoved
  • @oarfish 是的,primaryScreen - 从操作系统的角度来看(而不是从应用程序)。在多显示器配置中,您需要获取屏幕列表QList <QScreen*> screens = QGuiApplication::screens()QScreen 包括属性availableGeometryavailableVirtualGeometry - 知道QWindow(signalsxChanged/yChanged) 的位置,您可能会找到应用程序的确切屏幕并使用正确的方向。
【解决方案3】:

您尚未说明您正在为哪个平台开发,但某些平台具有用于显示通知的 API。最好在可用时使用它们,因为如果屏幕可能不合适,则右下角。您可以使用 krammer 的 answer

例如,在 GNOME 中,用户可以在特定屏幕上显示通知,或者选择根本不显示通知,直到他们单击系统托盘图标。 libnotify API 使开发人员可以访问此功能。

说到系统托盘,您可能需要考虑改用QSystemTrayIcon。它会使 UI 有点不同,但有一个独立于平台的 Qt API,它适用于 GNOME、KDE、MacOS、Windows 和可能的其他平台。它还有一个 showMessage 方法,用于以平台原生的方式显示消息,例如在某些版本的 Windows 中带有可爱爆裂声的气球中。

【讨论】:

猜你喜欢
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
相关资源
最近更新 更多