2016-10-19 34 views
0

我正在开发一个跨平台的应用程序,我希望显示一个QDialog基于systemtray的停靠位置。 在窗户上只有一个托盘,但它可以停靠在屏幕的任何一侧。 在Ubuntu上,您有顶级菜单栏,然后​​是桌面。 有没有办法使用Qt获得这个工具栏(Ubuntu Unity上的Launcher)的位置?如何在Qt中查找托盘系统栏位置?

回答

1

是否有跨平台的方式来获取“任务栏”的位置(例如在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]; 
}