我期待下面的代码片段在占用整个监视器的帧缓冲区的无框架和全屏 QGraphicsView 上显示我的监视器(其分辨率为 1920x1080)的每个角上的 4 个正方形:
int main(int argc, char **args)
{
QApplication app(argc, args);
const int monitorWidth = 1920;
const int monitorHeight = 1080;
const int rectDim = 40;
QGraphicsView view;
view.setWindowFlags(Qt::FramelessWindowHint);
view.setGeometry(0, 0, monitorWidth, monitorHeight);
view.showFullScreen();
QGraphicsScene scene;
scene.setBackgroundBrush(Qt::black);
scene.setSceneRect(QRectF(0.f, 0.f, monitorWidth, monitorHeight));
view.setScene(&scene);
//Create 4 rectangle items
QGraphicsRectItem items[4];
//top left corner
items[0].setRect(QRect(0, 0, rectDim, rectDim));
items[0].setPen(QPen(Qt::red));
items[0].setBrush(Qt::red);
//top right corner
items[1].setRect(QRect(monitorWidth-rectDim, 0, rectDim, rectDim));
items[1].setPen(QPen(Qt::red));
items[1].setBrush(Qt::red);
//bottom left corner
items[2].setRect(QRect(0, monitorHeight-rectDim, rectDim, rectDim));
items[2].setPen(QPen(Qt::red));
items[2].setBrush(Qt::red);
//bottom right corner
items[3].setRect(QRect(monitorWidth-rectDim, monitorHeight-rectDim, rectDim, rectDim));
items[3].setPen(QPen(Qt::red));
items[3].setBrush(Qt::red);
for(unsigned int i=0; i<4; ++i)
{
scene.addItem(items+i);
}
return app.exec();
}
我发现我的 QGraphicsView 中有滚动条,当 QGraphicsScene Rect 超出 QGraphicsView 视口的范围时会出现滚动条。但是,如上面的代码所示,两者都完全匹配。即使我使用以下方法隐藏滚动条:
view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
我发现底部和右侧的方块被不完全裁剪,这意味着 QGraphicsScene 的某些部分在 QGraphicsView 中不可见。为什么会这样?
显然,我的困惑在于场景坐标与视图坐标的映射。尽管阅读了 QGraphicsView参考中有关坐标系的信息,但我无法弄清楚出了什么问题。请帮忙。