#c #qt
#c #qt
Вопрос:
Я разрабатываю кроссплатформенное приложение и хочу отобразить QDialog
в зависимости от того, где закреплен systemtray. В Windows есть только один лоток, но его можно прикрепить к любой стороне экрана. В Ubuntu у вас есть верхняя панель меню, а затем панель запуска. Есть ли способ получить положение этой панели (и лаунчера в Ubuntu Unity) с помощью Qt?
Ответ №1:
Есть ли кроссплатформенный способ получить положение «панели задач» (например, Launcher в Ubuntu Unity) с помощью Qt?
Из-за разных платформенных API мы можем полагаться только на Qt, и я бы попытался найти разницу между всей геометрией «экрана» и «доступной». Доступная геометрия — это, по сути, весь экран за вычетом прямоугольника системной панели задач. Обратите внимание на систему multimonitor и укажите положение виджета для получения правильной полной и доступной геометрии монитора.
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];
}