Qt 理解从视图坐标到场景坐标的映射
我希望下面的代码片段能在占据整个显示器帧缓冲区的无框全屏QGraphicsView上显示显示器每个角落的4个正方形(分辨率为1920x1080):Qt 理解从视图坐标到场景坐标的映射,qt,Qt,我希望下面的代码片段能在占据整个显示器帧缓冲区的无框全屏QGraphicsView上显示显示器每个角落的4个正方形(分辨率为1920x1080): int main(int argc, char **args) { QApplication app(argc, args); const int monitorWidth = 1920; const int monitorHeight = 1080; const int rectDim = 40; QGr
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();
}
我发现底部和右侧的方块被不完全剪裁,这意味着QGraphicscene中仍有一些部分在QGraphicsView中不可见。为什么会这样
显然,我的困惑在于将场景坐标映射到视图中的坐标。尽管阅读了参考资料,我还是无法找出哪里出了问题。请帮助。从Qt论坛上的回复中获得答案 坐标不匹配源于QGraphicsView周围的帧引入的额外像素。可通过设置以下内容来解决此问题:
view.setFrameShape(QGraphicsView::NoFrame);
如果调用view.fitInView(scene.scen直立()),它是否正常工作?是的,可以。这是因为fitInView(通过操纵视图矩阵)缩放场景以适应视图。但那不是我想要的。通过这种方式,可以使任何尺寸的场景都适合QGraphicsView。对于我的应用程序,我不能允许这种扩展。我想在屏幕上的像素和QGraphicscene中的像素之间进行1:1的映射。是的,我知道它是如何工作的,但根据您的回答,我还想问您其他问题。不管怎样,我看你已经解决了,那太好了。
view.setFrameShape(QGraphicsView::NoFrame);