diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /examples/desktop/screenshot | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'examples/desktop/screenshot')
-rw-r--r-- | examples/desktop/screenshot/main.cpp | 52 | ||||
-rw-r--r-- | examples/desktop/screenshot/screenshot.cpp | 198 | ||||
-rw-r--r-- | examples/desktop/screenshot/screenshot.h | 100 | ||||
-rw-r--r-- | examples/desktop/screenshot/screenshot.pro | 9 |
4 files changed, 359 insertions, 0 deletions
diff --git a/examples/desktop/screenshot/main.cpp b/examples/desktop/screenshot/main.cpp new file mode 100644 index 0000000..59e8674 --- /dev/null +++ b/examples/desktop/screenshot/main.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> + +#include "screenshot.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Screenshot screenshot; + screenshot.show(); + return app.exec(); +} diff --git a/examples/desktop/screenshot/screenshot.cpp b/examples/desktop/screenshot/screenshot.cpp new file mode 100644 index 0000000..7d9545e --- /dev/null +++ b/examples/desktop/screenshot/screenshot.cpp @@ -0,0 +1,198 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "screenshot.h" + +//! [0] +Screenshot::Screenshot() +{ + screenshotLabel = new QLabel; + screenshotLabel->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Expanding); + screenshotLabel->setAlignment(Qt::AlignCenter); + screenshotLabel->setMinimumSize(240, 160); + + createOptionsGroupBox(); + createButtonsLayout(); + + mainLayout = new QVBoxLayout; + mainLayout->addWidget(screenshotLabel); + mainLayout->addWidget(optionsGroupBox); + mainLayout->addLayout(buttonsLayout); + setLayout(mainLayout); + + shootScreen(); + delaySpinBox->setValue(5); + + setWindowTitle(tr("Screenshot")); + resize(300, 200); +} +//! [0] + +//! [1] +void Screenshot::resizeEvent(QResizeEvent * /* event */) +{ + QSize scaledSize = originalPixmap.size(); + scaledSize.scale(screenshotLabel->size(), Qt::KeepAspectRatio); + if (!screenshotLabel->pixmap() + || scaledSize != screenshotLabel->pixmap()->size()) + updateScreenshotLabel(); +} +//! [1] + +//! [2] +void Screenshot::newScreenshot() +{ + if (hideThisWindowCheckBox->isChecked()) + hide(); + newScreenshotButton->setDisabled(true); + + QTimer::singleShot(delaySpinBox->value() * 1000, this, SLOT(shootScreen())); +} +//! [2] + +//! [3] +void Screenshot::saveScreenshot() +{ + QString format = "png"; + QString initialPath = QDir::currentPath() + tr("/untitled.") + format; + + QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), + initialPath, + tr("%1 Files (*.%2);;All Files (*)") + .arg(format.toUpper()) + .arg(format)); + if (!fileName.isEmpty()) + originalPixmap.save(fileName, format.toAscii()); +} +//! [3] + +//! [4] +void Screenshot::shootScreen() +{ + if (delaySpinBox->value() != 0) + qApp->beep(); +//! [4] + originalPixmap = QPixmap(); // clear image for low memory situations + // on embedded devices. +//! [5] + originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId()); + updateScreenshotLabel(); + + newScreenshotButton->setDisabled(false); + if (hideThisWindowCheckBox->isChecked()) + show(); +} +//! [5] + +//! [6] +void Screenshot::updateCheckBox() +{ + if (delaySpinBox->value() == 0) { + hideThisWindowCheckBox->setDisabled(true); + hideThisWindowCheckBox->setChecked(false); + } + else + hideThisWindowCheckBox->setDisabled(false); +} +//! [6] + +//! [7] +void Screenshot::createOptionsGroupBox() +{ + optionsGroupBox = new QGroupBox(tr("Options")); + + delaySpinBox = new QSpinBox; + delaySpinBox->setSuffix(tr(" s")); + delaySpinBox->setMaximum(60); + connect(delaySpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateCheckBox())); + + delaySpinBoxLabel = new QLabel(tr("Screenshot Delay:")); + + hideThisWindowCheckBox = new QCheckBox(tr("Hide This Window")); + + optionsGroupBoxLayout = new QGridLayout; + optionsGroupBoxLayout->addWidget(delaySpinBoxLabel, 0, 0); + optionsGroupBoxLayout->addWidget(delaySpinBox, 0, 1); + optionsGroupBoxLayout->addWidget(hideThisWindowCheckBox, 1, 0, 1, 2); + optionsGroupBox->setLayout(optionsGroupBoxLayout); +} +//! [7] + +//! [8] +void Screenshot::createButtonsLayout() +{ + newScreenshotButton = createButton(tr("New Screenshot"), + this, SLOT(newScreenshot())); + + saveScreenshotButton = createButton(tr("Save Screenshot"), + this, SLOT(saveScreenshot())); + + quitScreenshotButton = createButton(tr("Quit"), this, SLOT(close())); + + buttonsLayout = new QHBoxLayout; + buttonsLayout->addStretch(); + buttonsLayout->addWidget(newScreenshotButton); + buttonsLayout->addWidget(saveScreenshotButton); + buttonsLayout->addWidget(quitScreenshotButton); +} +//! [8] + +//! [9] +QPushButton *Screenshot::createButton(const QString &text, QWidget *receiver, + const char *member) +{ + QPushButton *button = new QPushButton(text); + button->connect(button, SIGNAL(clicked()), receiver, member); + return button; +} +//! [9] + +//! [10] +void Screenshot::updateScreenshotLabel() +{ + screenshotLabel->setPixmap(originalPixmap.scaled(screenshotLabel->size(), + Qt::KeepAspectRatio, + Qt::SmoothTransformation)); +} +//! [10] diff --git a/examples/desktop/screenshot/screenshot.h b/examples/desktop/screenshot/screenshot.h new file mode 100644 index 0000000..ecc7724 --- /dev/null +++ b/examples/desktop/screenshot/screenshot.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SCREENSHOT_H +#define SCREENSHOT_H + +#include <QPixmap> +#include <QWidget> + +QT_BEGIN_NAMESPACE +class QCheckBox; +class QGridLayout; +class QGroupBox; +class QHBoxLayout; +class QLabel; +class QPushButton; +class QSpinBox; +class QVBoxLayout; +QT_END_NAMESPACE + +//! [0] +class Screenshot : public QWidget +{ + Q_OBJECT + +public: + Screenshot(); + +protected: + void resizeEvent(QResizeEvent *event); + +private slots: + void newScreenshot(); + void saveScreenshot(); + void shootScreen(); + void updateCheckBox(); + +private: + void createOptionsGroupBox(); + void createButtonsLayout(); + QPushButton *createButton(const QString &text, QWidget *receiver, + const char *member); + void updateScreenshotLabel(); + + QPixmap originalPixmap; + + QLabel *screenshotLabel; + QGroupBox *optionsGroupBox; + QSpinBox *delaySpinBox; + QLabel *delaySpinBoxLabel; + QCheckBox *hideThisWindowCheckBox; + QPushButton *newScreenshotButton; + QPushButton *saveScreenshotButton; + QPushButton *quitScreenshotButton; + + QVBoxLayout *mainLayout; + QGridLayout *optionsGroupBoxLayout; + QHBoxLayout *buttonsLayout; +}; +//! [0] + +#endif diff --git a/examples/desktop/screenshot/screenshot.pro b/examples/desktop/screenshot/screenshot.pro new file mode 100644 index 0000000..3ecbf8f --- /dev/null +++ b/examples/desktop/screenshot/screenshot.pro @@ -0,0 +1,9 @@ +HEADERS = screenshot.h +SOURCES = main.cpp \ + screenshot.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/desktop/screenshot +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS screenshot.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/desktop/screenshot +INSTALLS += target sources |