Qt打开并显示图像

imagewidget.h

 

#ifndef IMAGEWIDGET_H 

 #define IMAGEWIDGET_H 

  

 #include <QWidget> 

 #include <QImage> 

 #include <QPainter> 

 #include <QString> 

 #include <QFileDialog> 

 #include <QMessageBox> 

 #include <QPushButton> 

  

 class ImageWidget : public QWidget 

 { 

     Q_OBJECT 

 public: 

     ImageWidget(); 

  

  

     /* The QImage class provides a hardware-independent 

  image representation that allows direct access to the 

 pixel data, and can be used as a paint device. 

  

 Qt provides four classes for handling image data: 

 QImage, QPixmap, QBitmap and QPicture. QImage is 

 designed and optimized for I/O, and for direct pixel access 

 and manipulation, while QPixmap is designed and optimized 

 for showing images on screen. QBitmap is only a convenience 

  class that inherits QPixmap, ensuring a depth of 1. Finally, 

 the QPicture class is a paint device that records and replays 

 QPainter commands.      */ 

     QImage img; 

  

 protected: 

     void paintEvent(QPaintEvent*); 

 private: 

      QPushButton *openButton; 

 public slots: 

     void openImage(); 

 }; 

  

 #endif // IMAGEWIDGET_H 

 
 
imagewidget.cpp
#include "imagewidget.h" 

  

 ImageWidget::ImageWidget() 

 { 

     openButton=new QPushButton(tr("Open Image"),this); 

     //openButton->setGeometry(50,50,50,100); 

     connect(openButton,SIGNAL(clicked()),this,SLOT(openImage())); 

     openButton->show(); 

 } 

  

 void ImageWidget::paintEvent(QPaintEvent *event) { 

     QPainter painter(this); 

     if(!img.isNull()) 

         painter.drawImage(0,0,img); 

     //img.save("test.bmp"); 

 } 

  

 void ImageWidget::openImage() 

 { 

    QString filename=QFileDialog::getOpenFileName(this, 

                                                   tr("Open Image"),"", 

                                                   tr("BMP(*.bmp);;JPG(*.jpg);;ALL files(*.*)")); 

     if(filename.isEmpty()) 

     { 

         QMessageBox::information(this,tr("Open Image"), 

                                      tr("Please select an image to open")); 

         filename=QFileDialog::getOpenFileName(this, 

                                                   tr("Open Image"),"", 

                                                   tr("BMP(*.bmp);;JPG(*.jpg);;ALL files(*.*)")); 

     } 

  

      if(!(img.load(filename,0))) 

      { 

         QMessageBox::information(this,tr("Unable to open the Image"), 

                                 tr("Please select a valid image.")); 

        return; 

      } 

     QWidget::update(); 

 } 

 

你可能感兴趣的:(qt)