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

📄 imageviewer.cpp

📁 简单的基于QT4的图片查看器
💻 CPP
字号:
 #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;/**/	 std::cout<<"label has setPixmap"<<std::endl;         printAct->setEnabled(true);         fitToWindowAct->setEnabled(true);         updateActions();/**/	 std::cout<<"printAct true,updated action"<<std::endl;         if (!fitToWindowAct->isChecked())             imageLabel->adjustSize();     }	 getchar(); } void ImageViewer::print() {/**/std::cout<<"ala, enter print_function..."<<std::endl;     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());/**/std::cout<<"before call painter draw"<<std::endl;         painter.drawPixmap(0, 0, *imageLabel->pixmap());/**/std::cout<<"end call painter draw"<<std::endl;     } #endif /**/std::cout<<"en.. end print_function"<<std::endl; } 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 + -