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

📄 imageviewer.cpp~

📁 简单的基于QT4的图片查看器
💻 CPP~
字号:
 /**************************************************************************** ** ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** This file is part of the example classes of the Qt Toolkit. ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License versions 2.0 or 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 GNU General Public Licensing requirements will be met: ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special ** exception, Nokia gives you certain additional rights. These rights ** are described in the Nokia Qt GPL Exception version 1.3, included in ** the file GPL_EXCEPTION.txt in this package. ** ** Qt for Windows(R) Licensees ** As a special exception, Nokia, 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. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include <QtGui> #include "imageviewer.h" ImageViewer::ImageViewer() {     imageLabel = new QLabel;     imageLabel->setBackgroundRole(QPalette::Base);     imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);     imageLabel->setScaledContents(true);     scrollArea = new QScrollArea;     scrollArea->setBackgroundRole(QPalette::Dark);     scrollArea->setWidget(imageLabel);     setCentralWidget(scrollArea);     createActions();     createMenus();     setWindowTitle(tr("Image Viewer"));     resize(500, 400); } void ImageViewer::open() {     QString fileName = QFileDialog::getOpenFileName(this,                                     tr("Open File"), QDir::currentPath());     if (!fileName.isEmpty()) {         QImage image(fileName);         if (image.isNull()) {             QMessageBox::information(this, tr("Image Viewer"),                                      tr("Cannot load %1.").arg(fileName));             return;         }         imageLabel->setPixmap(QPixmap::fromImage(image));         scaleFactor = 1.0;         printAct->setEnabled(true);         fitToWindowAct->setEnabled(true);         updateActions();         if (!fitToWindowAct->isChecked())             imageLabel->adjustSize();     } } void ImageViewer::print() {     Q_ASSERT(imageLabel->pixmap()); #ifndef QT_NO_PRINTER     QPrintDialog dialog(&printer, this);     if (dialog.exec()) {         QPainter painter(&printer);         QRect rect = painter.viewport();         QSize size = imageLabel->pixmap()->size();         size.scale(rect.size(), Qt::KeepAspectRatio);         painter.setViewport(rect.x(), rect.y(), size.width(), size.height());         painter.setWindow(imageLabel->pixmap()->rect());         painter.drawPixmap(0, 0, *imageLabel->pixmap());     } #endif } void ImageViewer::zoomIn() {     scaleImage(1.25); } void ImageViewer::zoomOut() {     scaleImage(0.8); } void ImageViewer::normalSize() {     imageLabel->adjustSize();     scaleFactor = 1.0; } void ImageViewer::fitToWindow() {     bool fitToWindow = fitToWindowAct->isChecked();     scrollArea->setWidgetResizable(fitToWindow);     if (!fitToWindow) {         normalSize();     }     updateActions(); } void ImageViewer::about() {     QMessageBox::about(this, tr("About Image Viewer"),             tr("<p>The <b>Image Viewer</b> example shows how to combine QLabel "                "and QScrollArea to display an image. QLabel is typically used "                "for displaying a text, but it can also display an image. "                "QScrollArea provides a scrolling view around another widget. "                "If the child widget exceeds the size of the frame, QScrollArea "                "automatically provides scroll bars. </p><p>The example "                "demonstrates how QLabel's ability to scale its contents "                "(QLabel::scaledContents), and QScrollArea's ability to "                "automatically resize its contents "                "(QScrollArea::widgetResizable), can be used to implement "                "zooming and scaling features. </p><p>In addition the example "                "shows how to use QPainter to print an image.</p>")); } void ImageViewer::createActions() {     openAct = new QAction(tr("&Open..."), this);     openAct->setShortcut(tr("Ctrl+O"));     connect(openAct, SIGNAL(triggered()), this, SLOT(open()));     printAct = new QAction(tr("&Print..."), this);     printAct->setShortcut(tr("Ctrl+P"));     printAct->setEnabled(false);     connect(printAct, SIGNAL(triggered()), this, SLOT(print()));     exitAct = new QAction(tr("E&xit"), this);     exitAct->setShortcut(tr("Ctrl+Q"));     connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));     zoomInAct = new QAction(tr("Zoom &In (25%)"), this);     zoomInAct->setShortcut(tr("Ctrl++"));     zoomInAct->setEnabled(false);     connect(zoomInAct, SIGNAL(triggered()), this, SLOT(zoomIn()));     zoomOutAct = new QAction(tr("Zoom &Out (25%)"), this);     zoomOutAct->setShortcut(tr("Ctrl+-"));     zoomOutAct->setEnabled(false);     connect(zoomOutAct, SIGNAL(triggered()), this, SLOT(zoomOut()));     normalSizeAct = new QAction(tr("&Normal Size"), this);     normalSizeAct->setShortcut(tr("Ctrl+S"));     normalSizeAct->setEnabled(false);     connect(normalSizeAct, SIGNAL(triggered()), this, SLOT(normalSize()));     fitToWindowAct = new QAction(tr("&Fit to Window"), this);     fitToWindowAct->setEnabled(false);     fitToWindowAct->setCheckable(true);     fitToWindowAct->setShortcut(tr("Ctrl+F"));     connect(fitToWindowAct, SIGNAL(triggered()), this, SLOT(fitToWindow()));     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 ImageViewer::createMenus() {     fileMenu = new QMenu(tr("&File"), this);     fileMenu->addAction(openAct);     fileMenu->addAction(printAct);     fileMenu->addSeparator();     fileMenu->addAction(exitAct);     viewMenu = new QMenu(tr("&View"), this);     viewMenu->addAction(zoomInAct);     viewMenu->addAction(zoomOutAct);     viewMenu->addAction(normalSizeAct);     viewMenu->addSeparator();     viewMenu->addAction(fitToWindowAct);     helpMenu = new QMenu(tr("&Help"), this);     helpMenu->addAction(aboutAct);     helpMenu->addAction(aboutQtAct);     menuBar()->addMenu(fileMenu);     menuBar()->addMenu(viewMenu);     menuBar()->addMenu(helpMenu); } void ImageViewer::updateActions() {     zoomInAct->setEnabled(!fitToWindowAct->isChecked());     zoomOutAct->setEnabled(!fitToWindowAct->isChecked());     normalSizeAct->setEnabled(!fitToWindowAct->isChecked()); } void ImageViewer::scaleImage(double factor) {     Q_ASSERT(imageLabel->pixmap());     scaleFactor *= factor;     imageLabel->resize(scaleFactor * imageLabel->pixmap()->size());     adjustScrollBar(scrollArea->horizontalScrollBar(), factor);     adjustScrollBar(scrollArea->verticalScrollBar(), factor);     zoomInAct->setEnabled(scaleFactor < 3.0);     zoomOutAct->setEnabled(scaleFactor > 0.333); } void ImageViewer::adjustScrollBar(QScrollBar *scrollBar, double factor) {     scrollBar->setValue(int(factor * scrollBar->value()                             + ((factor - 1) * scrollBar->pageStep()/2))); }

⌨️ 快捷键说明

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