0
我正在开发一个跨平台的应用程序,我希望显示一个QDialog
基于systemtray的停靠位置。 在窗户上只有一个托盘,但它可以停靠在屏幕的任何一侧。 在Ubuntu上,您有顶级菜单栏,然后是桌面。 有没有办法使用Qt获得这个工具栏(Ubuntu Unity上的Launcher)的位置?如何在Qt中查找托盘系统栏位置?
我正在开发一个跨平台的应用程序,我希望显示一个QDialog
基于systemtray的停靠位置。 在窗户上只有一个托盘,但它可以停靠在屏幕的任何一侧。 在Ubuntu上,您有顶级菜单栏,然后是桌面。 有没有办法使用Qt获得这个工具栏(Ubuntu Unity上的Launcher)的位置?如何在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);
凡availRect
应该是entireRect
一个子集。那么你需要弄清楚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];
}