愤怒的小鸟

学而不思则罔,思而不学则殆……

QImage与QPixmap加载图片 效果

============================================================================================

PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent)

{
this->setWindowTitle("deal picture");

//表达1    此种情况也等同于不写  只有重新设置图片大小的时候才需要   eg:表达3
//QPixmap pixmap;
//pixmap.load("Picture.JPG");


//表达2   样式表方法   只能填充部分
 
this->setObjectName("myframe");
 
this->setStyleSheet("QFrame#myframe{border-image:url(Picture.JPG)}" );
 
this->setAutoFillBackground(true);


//表达3    根据图片的大小来设定界面
 
//QPixmap pixmap;    
 
//pixmap.load("Picture.JPG");
 
//resize(pixmap.size());  

//表达4   palette方法  填充整个界面   会出现一个界面里有多张图片的效果 
//QPixmap pixmap("Picture.JPG");
//QPalette   palette;
//palette.setBrush(this->backgroundRole(),QBrush(pixmap));
//this->setPalette(palette);
}

void PixmapTest::paintEvent(QPaintEvent *event)
{
 
QPainter painter(this);
 
painter.drawPixmap(0, 0, QPixmap("Picture.JPG"));

 }

表达1、2运行效果如下:

表达3的运行效果如下:


表达4:运行效果


============================================================================================

其中以下方法(Qlabel),也可以达到表达1、2的效果

PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent)
{
this->setWindowTitle("deal picture");

QPixmap pixmap;
pixmap.load("Picture.JPG");
label = new QLabel(this);
label->setPixmap(pixmap);

}

============================================================================================

以上几种情况图片大小和界面大小都不是很匹配,有没有方法让图片自动扩展到整个界面呢?

PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent)
{
this->setFixedSize(640,480);
this->setWindowTitle("deal picture");

}

void PixmapTest::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPixmap pix;

// 1 、2两句可以任选一句  也就是说QPixmap在load图片时,实际上就是将QImage转化为QPixmap过程
pix.load("Picture.JPG");     // 1
//pix = pix.fromImage(image);// 2
painter.drawPixmap(0, 0, 640, 480, pix);
}

运行效果如下:


但是如果paintEvent中的方法换为:

void PixmapTest::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QImage image;
image.load("Picture.JPG");
painter.drawImage(0, 0, image, 0, 0, 640, 480);  //注意大小仍然是界面大小哦

}

效果会如何呢?


【综述】从上面可以看出QImage在加载图片时,图片不会根据界面的大小而改变,也就是说我们不能根据界面来拉伸和压缩图片;

然而QPixmap在默认情况下,大小即为图片大小,但是它可以拉伸和压缩图片。。。

============================================================================================

但是QPixmap和QImage在效果上有什么区别呢?

void PixmapTest::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QImage image;
image.load("Picture.JPG");
painter.drawImage(0, 0, image, 0, 0, 320, 480);
QPixmap pix;
pix.load("Picture.JPG");
//pix = pix.fromImage(image);
painter.drawPixmap(320, 0, 320, 480, pix);
}

效果正如我们想想的那样:



此文章参考了网友们的一些材料,小弟做了下我总结 END

阅读更多
文章标签: image 扩展 url
个人分类: Qt
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭