/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/#include <QtGui>#include "screenshot.h"
Screenshot::Screenshot()
{
screenshotLabel =newQLabel;
screenshotLabel->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
screenshotLabel->setAlignment(Qt::AlignCenter);
screenshotLabel->setMinimumSize(240,160);
createOptionsGroupBox();
createButtonsLayout();
mainLayout =newQVBoxLayout;
mainLayout->addWidget(screenshotLabel);
mainLayout->addWidget(optionsGroupBox);
mainLayout->addLayout(buttonsLayout);
setLayout(mainLayout);
shootScreen();
delaySpinBox->setValue(5);
setWindowTitle(tr("Screenshot"));
resize(300,200);
}
void Screenshot::resizeEvent(QResizeEvent*/* event */)
{
QSize scaledSize = originalPixmap.size();
scaledSize.scale(screenshotLabel->size(),Qt::KeepAspectRatio);
if (!screenshotLabel->pixmap()
|| scaledSize != screenshotLabel->pixmap()->size())
updateScreenshotLabel();
}
void Screenshot::newScreenshot()
{
if (hideThisWindowCheckBox->isChecked())
hide();
newScreenshotButton->setDisabled(true);
QTimer::singleShot(delaySpinBox->value() *1000,this, SLOT(shootScreen()));
}
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());
}
void Screenshot::shootScreen()
{
if (delaySpinBox->value() !=0)
qApp->beep();
originalPixmap =QPixmap(); // clear image for low memory situations// on embedded devices.
originalPixmap =QPixmap::grabWindow(QApplication::desktop()->winId());
updateScreenshotLabel();
newScreenshotButton->setDisabled(false);
if (hideThisWindowCheckBox->isChecked())
show();
}
void Screenshot::updateCheckBox()
{
if (delaySpinBox->value() ==0) {
hideThisWindowCheckBox->setDisabled(true);
hideThisWindowCheckBox->setChecked(false);
}
else
hideThisWindowCheckBox->setDisabled(false);
}
void Screenshot::createOptionsGroupBox()
{
optionsGroupBox =newQGroupBox(tr("Options"));
delaySpinBox =newQSpinBox;
delaySpinBox->setSuffix(tr(" s"));
delaySpinBox->setMaximum(60);
connect(delaySpinBox, SIGNAL(valueChanged(int)),this, SLOT(updateCheckBox()));
delaySpinBoxLabel =newQLabel(tr("Screenshot Delay:"));
hideThisWindowCheckBox =newQCheckBox(tr("Hide This Window"));
optionsGroupBoxLayout =newQGridLayout;
optionsGroupBoxLayout->addWidget(delaySpinBoxLabel,0,0);
optionsGroupBoxLayout->addWidget(delaySpinBox,0,1);
optionsGroupBoxLayout->addWidget(hideThisWindowCheckBox,1,0,1,2);
optionsGroupBox->setLayout(optionsGroupBoxLayout);
}
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 =newQHBoxLayout;
buttonsLayout->addStretch();
buttonsLayout->addWidget(newScreenshotButton);
buttonsLayout->addWidget(saveScreenshotButton);
buttonsLayout->addWidget(quitScreenshotButton);
}
QPushButton*Screenshot::createButton(constQString&text,QWidget*receiver,constchar*member)
{
QPushButton*button =newQPushButton(text);
button->connect(button, SIGNAL(clicked()), receiver, member);
return button;
}
void Screenshot::updateScreenshotLabel()
{
screenshotLabel->setPixmap(originalPixmap.scaled(screenshotLabel->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
}
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter
ou par MP !