如何在Qt中找到托盘系统栏的位置

How to find out tray system bar position in Qt?

本文关键字:系统 位置 Qt      更新时间:2023-10-16

我正在开发一个跨平台的应用程序,我希望显示一个基于系统托盘停靠的QDialog。在窗口上只有一个托盘,但它可以停靠在屏幕的任何一边。在Ubuntu上,你有顶部菜单栏和启动器。是否有一种方法来获得这个酒吧的位置(和Ubuntu Unity上的启动器)与Qt?

是否有一种跨平台的方法来获取"任务栏"的位置?启动器在Ubuntu Unity)与Qt?

由于不同的平台api,我们只能依赖Qt,我会尝试找到整个"屏幕"几何形状和"可用"几何形状之间的差异。可用的几何图形基本上是整个屏幕减去系统任务栏的矩形。注意多监视器系统,并提供部件位置,以获得适当的完整和可用的监视器几何。

http://doc.qt.io/qt-5/qdesktopwidget.html

QRect entireRect =
   QApplication::desktop()->screenGeometry(pMyAppWidget);
QRect availRect =
   QApplication::desktop()->availableGeometry(pMyAppWidget);

其中availRectentireRect的子集。然后你需要找出entireRect的哪个区域不在availRect的内部,这并不复杂。

我提出一个简单的方法来找到一个"减"矩形:

QRegion availRgn(availRect);
QRegion entireRgn(entireRect);
auto rects = entireRgn.subtracted(availRgn).rects();
if (rects.size() > 0) {
   // there is a task bar rectangle found
   QRect taskBarRect = rects[0];
}