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

📄 mainwindow.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.**** This file is part of the example classes 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://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** 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 <QtGui>#include <QtOpenGL>#include "glwidget.h"#include "mainwindow.h"MainWindow::MainWindow(){    centralWidget = new QWidget;    setCentralWidget(centralWidget);    glWidget = new GLWidget;    pixmapLabel = new QLabel;    glWidgetArea = new QScrollArea;    glWidgetArea->setWidget(glWidget);    glWidgetArea->setWidgetResizable(true);    glWidgetArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);    glWidgetArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);    glWidgetArea->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);    glWidgetArea->setMinimumSize(50, 50);    pixmapLabelArea = new QScrollArea;    pixmapLabelArea->setWidget(pixmapLabel);    pixmapLabelArea->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);    pixmapLabelArea->setMinimumSize(50, 50);    xSlider = createSlider(SIGNAL(xRotationChanged(int)),                           SLOT(setXRotation(int)));    ySlider = createSlider(SIGNAL(yRotationChanged(int)),                           SLOT(setYRotation(int)));    zSlider = createSlider(SIGNAL(zRotationChanged(int)),                           SLOT(setZRotation(int)));    createActions();    createMenus();    QGridLayout *centralLayout = new QGridLayout;    centralLayout->addWidget(glWidgetArea, 0, 0);    centralLayout->addWidget(pixmapLabelArea, 0, 1);    centralLayout->addWidget(xSlider, 1, 0, 1, 2);    centralLayout->addWidget(ySlider, 2, 0, 1, 2);    centralLayout->addWidget(zSlider, 3, 0, 1, 2);    centralWidget->setLayout(centralLayout);    xSlider->setValue(15 * 16);    ySlider->setValue(345 * 16);    zSlider->setValue(0 * 16);    setWindowTitle(tr("Grabber"));    resize(400, 300);}void MainWindow::renderIntoPixmap(){    QSize size = getSize();    if (size.isValid()) {        QPixmap pixmap = glWidget->renderPixmap(size.width(), size.height());        setPixmap(pixmap);    }}void MainWindow::grabFrameBuffer(){    QImage image = glWidget->grabFrameBuffer();    setPixmap(QPixmap::fromImage(image));}void MainWindow::clearPixmap(){    setPixmap(QPixmap());}void MainWindow::about(){    QMessageBox::about(this, tr("About Grabber"),            tr("The <b>Grabber</b> example demonstrates two approaches for "               "rendering OpenGL into a Qt pixmap."));}void MainWindow::createActions(){    renderIntoPixmapAct = new QAction(tr("&Render into Pixmap..."), this);    renderIntoPixmapAct->setShortcut(tr("Ctrl+R"));    connect(renderIntoPixmapAct, SIGNAL(triggered()),            this, SLOT(renderIntoPixmap()));    grabFrameBufferAct = new QAction(tr("&Grab Frame Buffer"), this);    grabFrameBufferAct->setShortcut(tr("Ctrl+G"));    connect(grabFrameBufferAct, SIGNAL(triggered()),            this, SLOT(grabFrameBuffer()));    clearPixmapAct = new QAction(tr("&Clear Pixmap"), this);    clearPixmapAct->setShortcut(tr("Ctrl+L"));    connect(clearPixmapAct, SIGNAL(triggered()), this, SLOT(clearPixmap()));    exitAct = new QAction(tr("E&xit"), this);    exitAct->setShortcut(tr("Ctrl+Q"));    connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));    aboutAct = new QAction(tr("&About"), this);    connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));    aboutQtAct = new QAction(tr("About &Qt"), this);    connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));}void MainWindow::createMenus(){    fileMenu = menuBar()->addMenu(tr("&File"));    fileMenu->addAction(renderIntoPixmapAct);    fileMenu->addAction(grabFrameBufferAct);    fileMenu->addAction(clearPixmapAct);    fileMenu->addSeparator();    fileMenu->addAction(exitAct);    helpMenu = menuBar()->addMenu(tr("&Help"));    helpMenu->addAction(aboutAct);    helpMenu->addAction(aboutQtAct);}QSlider *MainWindow::createSlider(const char *changedSignal,                                  const char *setterSlot){    QSlider *slider = new QSlider(Qt::Horizontal);    slider->setRange(0, 360 * 16);    slider->setSingleStep(16);    slider->setPageStep(15 * 16);    slider->setTickInterval(15 * 16);    slider->setTickPosition(QSlider::TicksRight);    connect(slider, SIGNAL(valueChanged(int)), glWidget, setterSlot);    connect(glWidget, changedSignal, slider, SLOT(setValue(int)));    return slider;}void MainWindow::setPixmap(const QPixmap &pixmap){    pixmapLabel->setPixmap(pixmap);    QSize size = pixmap.size();    if (size - QSize(1, 0) == pixmapLabelArea->maximumViewportSize())        size -= QSize(1, 0);    pixmapLabel->resize(size);}QSize MainWindow::getSize(){    bool ok;    QString text = QInputDialog::getText(this, tr("Grabber"),                                         tr("Enter pixmap size:"),                                         QLineEdit::Normal,                                         tr("%1 x %2").arg(glWidget->width())                                                      .arg(glWidget->height()),                                         &ok);    if (!ok)        return QSize();    QRegExp regExp(tr("([0-9]+) *x *([0-9]+)"));    if (regExp.exactMatch(text)) {        int width = regExp.cap(1).toInt();        int height = regExp.cap(2).toInt();        if (width > 0 && width < 2048 && height > 0 && height < 2048)            return QSize(width, height);    }    return glWidget->size();}

⌨️ 快捷键说明

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