⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2005-2007 Trolltech ASA. All rights reserved.**** This file is part of the demonstration applications of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "view.h"#include <QtGui>#ifndef QT_NO_OPENGL#include <QtOpenGL>#endif#include <math.h>View::View(const QString &name, QWidget *parent)    : QFrame(parent){    setFrameStyle(Sunken | StyledPanel);    graphicsView = new QGraphicsView;    graphicsView->setRenderHint(QPainter::Antialiasing, false);    graphicsView->setDragMode(QGraphicsView::RubberBandDrag);    graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);    int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize);    QSize iconSize(size, size);    QToolButton *zoomInIcon = new QToolButton;    zoomInIcon->setAutoRepeat(true);    zoomInIcon->setAutoRepeatInterval(33);    zoomInIcon->setAutoRepeatDelay(0);    zoomInIcon->setIcon(QPixmap(":/zoomin.png"));    zoomInIcon->setIconSize(iconSize);    QToolButton *zoomOutIcon = new QToolButton;    zoomOutIcon->setAutoRepeat(true);    zoomOutIcon->setAutoRepeatInterval(33);    zoomOutIcon->setAutoRepeatDelay(0);    zoomOutIcon->setIcon(QPixmap(":/zoomout.png"));    zoomOutIcon->setIconSize(iconSize);    zoomSlider = new QSlider;    zoomSlider->setMinimum(0);    zoomSlider->setMaximum(500);    zoomSlider->setValue(250);    zoomSlider->setTickPosition(QSlider::TicksRight);    // Zoom slider layout    QVBoxLayout *zoomSliderLayout = new QVBoxLayout;    zoomSliderLayout->addWidget(zoomInIcon);    zoomSliderLayout->addWidget(zoomSlider);    zoomSliderLayout->addWidget(zoomOutIcon);    QToolButton *rotateLeftIcon = new QToolButton;    rotateLeftIcon->setIcon(QPixmap(":/rotateleft.png"));    rotateLeftIcon->setIconSize(iconSize);    QToolButton *rotateRightIcon = new QToolButton;    rotateRightIcon->setIcon(QPixmap(":/rotateright.png"));    rotateRightIcon->setIconSize(iconSize);    rotateSlider = new QSlider;    rotateSlider->setOrientation(Qt::Horizontal);    rotateSlider->setMinimum(-360);    rotateSlider->setMaximum(360);    rotateSlider->setValue(0);    rotateSlider->setTickPosition(QSlider::TicksBelow);    // Rotate slider layout    QHBoxLayout *rotateSliderLayout = new QHBoxLayout;    rotateSliderLayout->addWidget(rotateLeftIcon);    rotateSliderLayout->addWidget(rotateSlider);    rotateSliderLayout->addWidget(rotateRightIcon);    resetButton = new QToolButton;    resetButton->setText(tr("0"));    resetButton->setEnabled(false);    // Label layout    QHBoxLayout *labelLayout = new QHBoxLayout;    label = new QLabel(name);    antialiasButton = new QToolButton;    antialiasButton->setText(tr("Antialiasing"));    antialiasButton->setCheckable(true);    antialiasButton->setChecked(false);    openGlButton = new QToolButton;    openGlButton->setText(tr("OpenGL"));    openGlButton->setCheckable(true);#ifndef QT_NO_OPENGL    openGlButton->setEnabled(QGLFormat::hasOpenGL());#else    openGlButton->setEnabled(false);#endif    printButton = new QToolButton;    printButton->setIcon(QIcon(QPixmap(":/fileprint.png")));    labelLayout->addWidget(label);    labelLayout->addStretch();    labelLayout->addWidget(antialiasButton);    labelLayout->addWidget(openGlButton);    labelLayout->addWidget(printButton);    QGridLayout *topLayout = new QGridLayout;    topLayout->addLayout(labelLayout, 0, 0);    topLayout->addWidget(graphicsView, 1, 0);    topLayout->addLayout(zoomSliderLayout, 1, 1);    topLayout->addLayout(rotateSliderLayout, 2, 0);    topLayout->addWidget(resetButton, 2, 1);    setLayout(topLayout);    connect(resetButton, SIGNAL(clicked()), this, SLOT(resetView()));    connect(zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(setupMatrix()));    connect(rotateSlider, SIGNAL(valueChanged(int)), this, SLOT(setupMatrix()));    connect(graphicsView->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(setResetButtonEnabled()));    connect(graphicsView->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(setResetButtonEnabled()));    connect(antialiasButton, SIGNAL(toggled(bool)), this, SLOT(toggleAntialiasing()));    connect(openGlButton, SIGNAL(toggled(bool)), this, SLOT(toggleOpenGL()));    connect(rotateLeftIcon, SIGNAL(clicked()), this, SLOT(rotateLeft()));    connect(rotateRightIcon, SIGNAL(clicked()), this, SLOT(rotateRight()));    connect(zoomInIcon, SIGNAL(clicked()), this, SLOT(zoomIn()));    connect(zoomOutIcon, SIGNAL(clicked()), this, SLOT(zoomOut()));    connect(printButton, SIGNAL(clicked()), this, SLOT(print()));    setupMatrix();}QGraphicsView *View::view() const{    return graphicsView;}void View::resetView(){    zoomSlider->setValue(250);    rotateSlider->setValue(0);    setupMatrix();    graphicsView->ensureVisible(QRectF(0, 0, 0, 0));    resetButton->setEnabled(false);}void View::setResetButtonEnabled(){    resetButton->setEnabled(true);}void View::setupMatrix(){    qreal scale = ::pow(2.0, (zoomSlider->value() - 250) / 50.0);    QMatrix matrix;    matrix.scale(scale, scale);    matrix.rotate(rotateSlider->value());    graphicsView->setMatrix(matrix);    setResetButtonEnabled();}void View::toggleOpenGL(){#ifndef QT_NO_OPENGL    graphicsView->setViewport(openGlButton->isChecked() ? new QGLWidget(QGLFormat(QGL::SampleBuffers)) : new QWidget);#endif}void View::toggleAntialiasing(){    graphicsView->setRenderHint(QPainter::Antialiasing, antialiasButton->isChecked());}void View::print(){    QPrinter printer;    QPrintDialog dialog(&printer, this);    if (dialog.exec() == QDialog::Accepted) {        QPainter painter(&printer);        graphicsView->render(&painter);    }}void View::zoomIn(){    zoomSlider->setValue(zoomSlider->value() + 1);}void View::zoomOut(){    zoomSlider->setValue(zoomSlider->value() - 1);}void View::rotateLeft(){    rotateSlider->setValue(rotateSlider->value() - 10);}void View::rotateRight(){    rotateSlider->setValue(rotateSlider->value() + 10);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -