C++ QDesktopWidget availableGeometry()在Qt中工作不正常,需要垂直滚动以查看完整图像

C++ QDesktopWidget availableGeometry()在Qt中工作不正常,需要垂直滚动以查看完整图像,c++,image,qt,scroll,screen,C++,Image,Qt,Scroll,Screen,我想在Qt5.7的QGraphicsView中显示一个背景图像。我想窗口的大小是这样的,它完全覆盖了我的整个屏幕,而不需要滚动。因此,我想确保它为Windows中的任务栏和Ubuntu中的顶部和左侧面板留出空间(我使用的是Ubuntu 14.04) 我从Qt文档中找到了用于此目的的函数。StackOverflow和中已重申了这一点 但是,当我尝试使用它时,我发现如果我将滚动条策略设置为Qt::ScrollBarAlwaysOff,图像的一小部分会被切断,如果没有,我需要稍微垂直滚动 下面是一个小

我想在Qt5.7的
QGraphicsView
中显示一个背景图像。我想窗口的大小是这样的,它完全覆盖了我的整个屏幕,而不需要滚动。因此,我想确保它为Windows中的任务栏和Ubuntu中的顶部和左侧面板留出空间(我使用的是Ubuntu 14.04)

我从Qt文档中找到了用于此目的的函数。StackOverflow和中已重申了这一点

但是,当我尝试使用它时,我发现如果我将滚动条策略设置为
Qt::ScrollBarAlwaysOff
,图像的一小部分会被切断,如果没有,我需要稍微垂直滚动

下面是一个小示例代码:

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QApplication>
#include <QImage>
#include <QBrush>
#include <QDebug>
#include <QDesktopWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene *scene = new QGraphicsScene;
    QGraphicsView *view = new QGraphicsView;
    view->setScene(scene);
    QRect rec = QApplication::desktop()->availableGeometry();
    int screenHeight = rec.height();
    int screenWidth = rec.width();
    QImage *back = new QImage("image.jpg");
    QImage *background = new QImage(back->scaled(screenWidth,screenHeight,Qt::KeepAspectRatio,Qt::FastTransformation));
    QBrush *brush = new QBrush(*background);
    view->setBackgroundBrush(*brush);
 //   view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 //   view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setFixedSize(screenWidth,screenHeight);
    view->setSceneRect(0,0,screenWidth,screenHeight);
    view->show();

    return a.exec();
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
Qgraphicscene*场景=新的Qgraphicscene;
QGraphicsView*视图=新的QGraphicsView;
查看->设置场景(场景);
QRect rec=QApplication::desktop()->availableGeometry();
int screenHeight=rec.height();
int screenWidth=rec.width();
QImage*back=新的QImage(“image.jpg”);
QImage*background=新的QImage(后退->缩放(屏幕宽度、屏幕高度、Qt::KeepAspectRatio、Qt::FastTransformation));
QBrush*画笔=新的QBrush(*背景);
查看->收进地面笔刷(*笔刷);
//查看->设置水平滚动条策略(Qt::ScrollBarAlwaysOff);
//查看->设置垂直滚动条策略(Qt::ScrollBarAlwaysOff);
查看->设置固定大小(屏幕宽度、屏幕高度);
视图->设置屏幕竖立(0,0,屏幕宽度,屏幕高度);
查看->显示();
返回a.exec();
}
我的屏幕分辨率是1366x768像素,因此我使用了该尺寸的图像,并在显示之前使用
QImage::scaled()
函数对其进行缩放

例如,如果输入为: 图像属性:

当我运行上述代码时,我得到: (我从屏幕上裁剪了顶部和左侧面板)

为什么会这样?
availableGeometry()
是否不包括标题栏?我怎样才能纠正这个问题

谢谢。

可用的计量学()完全正确:)

问题是您没有考虑到帐户帧大小。您可以将图像的大小调整到最大可用的度量值,但窗口的框架也会发生一些变化。最后,你有更大的图像,然后在小部件上释放空间。这就是为什么你有滚动条

例如,您可以执行以下操作:

// 2 - because frame border is on the bottom and on the top.
QImage *background = new QImage(back->scaledToHeight(rec.height() - view->frameWidth() * 2));
那会有用的