QT提供了一个绘图管理框架用于2D绘图的管理和显示,其包括了3个类分别为QGraphicsItem, QGraphicsScene和QGraphicsView,分别实现了绘图对象管理、绘图管理和功能接口以及绘图的显示和渲染功能。
以下是调用该框架实现绘图图幅的比例调整功能。
1,首先创建一个基于QMainWindow类的gui程序。
2,在MainWindow构造函数中,创建一个基于“QGraphicsScene”类的控件sence,控件的图幅设置为5000×5000,并将此sence设置为窗口主控件。view为一个"QGraphicsView"类型的指针。
// setup draw scene scene = new QGraphicsScene(this);
scene->setSceneRect(QRectF(0, 0, 5000, 5000));
view = new QGraphicsView(scene);
// make the draw scene as the main window
this->setCentralWidget(view);
3,创建一个基于"QComboBox"类的下拉选择控件sceneScaleCombo,并设置50%、75%、100%、150%几种下拉值,然后将其停靠在主菜单栏上。其中“ui->mainToolBar”为界面文件"mainwindow.ui"中的主菜单栏指针。
// Creat tool bar of zoom
QComboBox *sceneScaleCombo = new QComboBox;
QStringList scales;
scales << tr("50%") << tr("75%") << tr("100%") << tr("125%") << tr("150%");
sceneScaleCombo->addItems(scales);
sceneScaleCombo->setCurrentIndex(2);
ui->mainToolBar->addWidget(sceneScaleCombo);
4,创建信号槽,信号类型为"currentIndexChanged(QString)",槽连接到"SceneScaleChanged(QString)"函数
connect(sceneScaleCombo, SIGNAL(currentIndexChanged(QString)),this, SLOT(SceneScaleChanged(QString))); // slot signal
5,创建图幅比例设置函数,该函数接收下拉选择控件"sceneScaleCombo"发送过来的比例修改消息,根据消息中的数值调整图幅。
void MainWindow::SceneScaleChanged(const QString &scale) {
double newScale = scale.left(scale.indexOf(tr("%"))).toDouble() / 100.0;
QMatrix oldMatrix = view->matrix();
view->resetMatrix();
view->translate(oldMatrix.dx(), oldMatrix.dy());
view->scale(newScale, newScale);
}
6,编译调试程序