QImage与QPixmap加载图片效果 【两者的区别】
2014-08-21 09:35
603 查看
QImage与QPixmap加载图片 效果 .
分类: QT开发qtQtQT
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运行效果如下:
![](http://hi.csdn.net/attachment/201110/17/0_1318820585ztZ3.gif)
表达3的运行效果如下:
![](http://hi.csdn.net/attachment/201110/17/0_1318821019tx5c.gif)
表达4:运行效果
![](http://hi.csdn.net/attachment/201110/17/0_13188211045T4E.gif)
============================================================================================
其中以下方法(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);
}
运行效果如下:
![](http://hi.csdn.net/attachment/201110/17/0_1318821669nUKw.gif)
但是如果paintEvent中的方法换为:
void PixmapTest::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QImage image;
image.load("Picture.JPG");
painter.drawImage(0, 0, image, 0, 0, 640, 480); //注意大小仍然是界面大小哦
}
效果会如何呢?
![](http://hi.csdn.net/attachment/201110/17/0_1318820585ztZ3.gif)
【综述】从上面可以看出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);//坐标(0,0),图片大小为(320,480)
QPixmap pix;
pix.load("Picture.JPG");
//pix = pix.fromImage(image);
painter.drawPixmap(320, 0, 320, 480, pix);//坐标(320,0),图片大小为(320,480)
}
效果正如我们想想的那样:
![](http://hi.csdn.net/attachment/201110/17/0_1318822449UUn2.gif)
相关文章推荐
- QImage与QPixmap加载图片 效果 .
- QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)
- QImage与QPixmap加载图片 效果
- hitTest方法所做的工作,事件传递,图片的两种加载方式的区别,毛玻璃效果,记录一下
- Jquery的一个loading图片效果,加载图片
- Jquery的一个loading图片效果,加载图片
- ImagesLazyLoad 图片延迟加载效果
- ImagesLazyLoad 图片延迟加载效果
- 影响加载PNG图片效果的原因
- jquery.lazyload.js实现图片延迟加载——wordpress图片随滚动条渐显效果
- Jquery的一个loading图片效果,加载图片
- 图片太多导致在网速慢的情况下效果太差需要用js预加载图片
- jquery.lazyload.js实现图片延迟加载——wordpress图片随滚动条渐显效果
- js实现图片加载时候逐渐出现的杂色效果
- js实现图片加载时候逐渐出现的杂色效果
- 浅谈tudou土豆网首页图片延迟加载的效果
- ImagesLazyLoad 图片延迟加载效果
- 设置Image控件加载图片完毕后的效果.
- 名站技术分析 - 浅谈tudou.com首页图片延迟加载的效果
- Flex图片加载进度条效果