我正在开发一个跨平台的应用程序,我希望根据systemtray停靠的位置显示QDialog
。
在窗户上只有一个托盘,但它可以停靠在屏幕的任何一侧。
在Ubuntu上你有顶级菜单栏然后是启动器。
有没有办法用Qt获得这个栏(和Ubuntu Unity上的Launcher)的位置?
答案 0 :(得分:1)
是否有跨平台方式来获取“任务栏”的位置? (例如。 使用Qt在Ubuntu Unity上启动器?
由于不同的平台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];
}
内且不复杂。
只是提出一种简单的方法来找到减去的'矩形:
@numba.njit()