您的位置:首页 > 其它

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运行效果如下:



表达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);//坐标(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)

}

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: