Qt中关于窗口展示任务栏与不展示任务栏


这里记录一下,在基于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 是整个应用程序的宽高。

猜你喜欢

转载自blog.csdn.net/blqzj214817/article/details/129583134