QT 显示图片
 

//ImageWidget 负责显示图片

//MyImageWidget,提供一个滚动条

//Widget加滚动条

//myers created

//imagewidget.h

#ifndef IMAGEWIDGET_H
#define IMAGEWIDGET_H
#include <QtGui/QWidget>
#include <QtGui/QPixmap>
#include <QtGui/QPainter>

class ImageWidget : public QWidget
{
    Q_OBJECT

public:
    ImageWidget(QWidget *parent = 0);
    ImageWidget(QPixmap&,QWidget*parent=0);
    ImageWidget(QString&,QWidget *parent=0);
    ImageWidget(const QString&,QWidget *parent=0);
    ~ImageWidget();
    void initPixmap();
    void setPixmap(QPixmap& pixmap);
    void setPixmap(QString& fileName);
    QPixmap getPixmap();
    QSize getSize();
private:
    QPixmap pix;
protected:
    void paintEvent(QPaintEvent *);
};

#endif // IMAGEWIDGET_H

//imagewidget.cpp#include "imagewidget.h"
#include <QFileInfo>
#include <QDesktopWidget>

#include <QDebug>

/*
 *默认构造一个同桌面大小的pixmap
 */
ImageWidget::ImageWidget(QWidget *parent)
    : QWidget(parent)
{
    if(pix.isNull()){
        initPixmap();
    }
}
/*
 *入口参数:pixmap,parent
 *功能:若pixmap为空,直接返回
 *
 */
ImageWidget::ImageWidget(QPixmap &pixmap,QWidget *parent)
    : QWidget(parent)
{
    setPixmap(pixmap);
}
/*
 *输入fileName,不允许传递临时变量
 *parent默认为0,即无父窗口
 *
 */
ImageWidget::ImageWidget(QString& fileName,QWidget *parent)
    :QWidget(parent)
{
   setPixmap(fileName);

}
ImageWidget::~ImageWidget()
{

}
void ImageWidget::paintEvent(QPaintEvent *)
{
    //画图
    QPainter painter(this);
    resize(pix.size());
    painter.drawPixmap(0,0,pix);
}
void ImageWidget::setPixmap(QPixmap &pixmap)
{

  if(pixmap.isNull())return;
  if(pix.isNull()){
      pix = QPixmap(pixmap.width(),pixmap.height());
  }
      pix = pixmap;
      update();
}
void ImageWidget::setPixmap(QString &fileName)
{
    //判断路径名是否合法
    if(fileName.isNull())return;
    QFileInfo fileInfo(fileName);
    if(!fileInfo.isFile())return;
    if(pix.isNull()){
        initPixmap();
    }
      pix.load(fileName);
      update();
}
QPixmap ImageWidget::getPixmap()
{
    return pix;
}
QSize ImageWidget::getSize()
{
    return pix.size();
}

void ImageWidget::initPixmap()
{
        QDesktopWidget desktop;
        pix = QPixmap(desktop.width(),desktop.height());
}

//myimagewidget.h

#ifndef MYIMAGEWIDGET_H
#define MYIMAGEWIDGET_H

#include <QScrollArea>
#include "imagewidget.h"

class MyImageWidget : public QScrollArea
{
    Q_OBJECT
public:
    MyImageWidget(QPixmap&,QWidget * parent =0);
    MyImageWidget(QString&,QWidget * parent =0);
    void setSize(const QSize&size);
    void setSize(int x,int y);
    void setPixmap(QPixmap&pixmap);
    void setPixmap(QString&fileName);
    QPixmap getPixmap();
    QSize getPixSize();
signals:
public slots:
public:
    ImageWidget image;
};

#endif // MYIMAGEWIDGET_H

//myimagewidget.cpp

#include "myimagewidget.h"

MyImageWidget::MyImageWidget(QPixmap &pixmap, QWidget *parent)
    :QScrollArea(parent)
{
    setPixmap(pixmap);
    this->setWidget(&image);
    this->widget()->setMinimumSize(image.getSize());
    this->setBackgroundRole(QPalette::Dark);
}
MyImageWidget::MyImageWidget(QString &fileName, QWidget *parent)
        :QScrollArea(parent)
{
    setPixmap(fileName);
    this->setWidget(&image);
    this->widget()->setMinimumSize(image.getSize());
    this->setBackgroundRole(QPalette::Dark);
    this->setAlignment(Qt::AlignCenter);
}
void MyImageWidget::setSize(int x, int y)
{
    resize(x,y);
    update();
}
void MyImageWidget::setSize(const QSize &size)
{
    resize(size);
    update();
}
void MyImageWidget::setPixmap(QPixmap &pixmap)
{
    image.setPixmap(pixmap);
}
void MyImageWidget::setPixmap(QString &fileName)
{
    image.setPixmap(fileName);
}
QPixmap MyImageWidget::getPixmap()
{
    return image.getPixmap();
}
QSize MyImageWidget::getPixSize()
{
    return image.getSize();
}
//测试

#include <QtGui/QApplication>
#include "myimagewidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString fileName=QString("/home/mingming/1.jpg");
    QPixmap pix("/home/mingming/1.jpg");

    MyImageWidget my(pix);
    MyImageWidget my2(fileName);
    my.show();
    my2.show();
    return a.exec();
}

posted on 2011-12-06 23:18  applesun0757  阅读(427)  评论(0)    收藏  举报