【发布时间】:2018-09-28 08:28:52
【问题描述】:
我正在学习 Qt5,我使用的是 Qt 5.9.1。现在我有一个问题:即使主窗口的大小发生变化,如何将图形保持在主窗口的中心?
去年我在课堂上学习了MFC,老师告诉我们,为了让图形始终留在窗口中,我们应该做到以下几点:
- 让视口的原点成为客户区的中心;
- 让视口的大小等于客户区的大小;
- 设窗口原点为图形外接矩形的中心;
- 设窗口大小为图形边框大小。
所以我在 Qt5 中做同样的事情:
// main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtGuiApplication1 w;
// get the size and center of client area
// and then pass the values to QtGuiApplication
int width = QApplication::desktop()->availableGeometry().width();
int height = QApplication::desktop()->availableGeometry().height();
QPoint center = QApplication::desktop()->availableGeometry().center();
w.setViewport(center,width,height);
w.show();
return a.exec();
}
// GtGuiApplication.cpp
void QtGuiApplication1::paintEvent(QPaintEvent *)
{
QPainter painter(this);
// set the viewport
painter.setViewport(centerOfViewport.x(),centerOfViewport.y(), widthOfViewport, heightOfViewport);
static const QPointF points[4] = {
QPointF(10.0, 10.0),
QPointF(10.0, 80.0),
QPointF(50.0, 80.0),
QPointF(10.0, 10.0)
};
// set the window
painter.setWindow(30,45,40,70);
painter.drawPolyline(points, 4);
}
【问题讨论】: