这里记录一下,在基于qt5开发的时候,有时候需要显示windows的任务栏有时候不需要显示windows的任务栏时,可能会使用到函数。
获取窗口的大小
使用函数:
#include <QDesktopWidget>
#include <QRect>
QDesktopWidget* desk = QApplication::desktop();
QRect availableRect = desk->availableGeometry(desk->screen(0));//screen()这里的参数是第几个屏幕,0代表第一个屏幕,针对于多屏幕而言,可以通过desk->screen(0)来指定获取第几个屏幕的有效矩形
这个函数获取的是除任务栏和标题栏以外的窗口矩形。由于windows窗口没有标题栏,所以这里获取的是相对于屏幕而言的除任务栏以外的窗口的矩形。
获取屏幕大小
使用函数:
QRect wholeRect = desk->screenGeometry(desk->screen(0));
获取的是第一个屏幕全屏时的矩形,这里包含任务栏和标题栏,相对于windows系统的屏幕而言就是包含任务栏的窗口矩形,整个屏幕的矩形大小。
计算任务栏的大小
针对于上述记录的两条中获取的矩形大小,这里来计算任务栏的大小。使用函数:
QRect availableRect = desk->availableGeometry(desk->screen(0));
QRect wholeRect = desk->screenGeometry(desk->screen(0));
int nLeft = wholeRect.left() - availableRect.left();
int nTop = wholeRect.top() - availableRect.top();
int nWidth = wholeRect.width() - availableRect.width();
int nHeight = wholeRect.height() - availableRect.height();
QRect taskRect(nLeft ,nTop ,nWidth ,nHeight);
判断任务栏的位置并结合其位置不同,得到其应用程序的宽高
这里得到的是除任务栏之后应用程序的宽高。使用的函数如下:
void hasTaskBarMainWindowWideHeight(const QRect& availableRect,
const QRect& wholeRect,
int& nHeight, int& nWidth)//这里的参数1,2分别是上述中得到的QRect availableRect = desk->availableGeometry(desk->screen(0));
// QRect wholeRect = desk->screenGeometry(desk->screen(0));
{
// Determine the position of the taskbar
if (availableRect.top() != wholeRect.top()) // 任务栏在top
{
nHeight = availableRect.height();
nWidth = availableRect.width();
}
else if (availableRect.left() != wholeRect.left()) // 任务栏在left
{
nWidth = availableRect.width();
nHeight = availableRect.height();
}
else if (availableRect.right() != wholeRect.right()) // 任务栏在right
{
nWidth = availableRect.width();
nHeight = availableRect.height();
}
else if (availableRect.bottom() != wholeRect.bottom()) // 任务栏在bottom
{
nHeight = availableRect.height();
nWidth = availableRect.width();
}
else // full screen,没有任务栏
{
nHeight = wholeRect.height();
nWidth = wholeRect.width();
}
}
这里的宽高nWidth nHeight 是整个应用程序的宽高。