QImage与QPixmap加载图片效果(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运行效果如下: 

QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)_第1张图片

   表达3的运行效果如下:

QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)_第2张图片

表达4:运行效果

QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)_第3张图片

 

其中以下方法(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);
}

  运行效果如下

QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)_第4张图片

 但是如果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加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)_第5张图片

   从上面可以看出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)
}

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

QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)_第6张图片

 

参考:

https://www.yuque.com/docs/share/a226cd50-d324-4f86-b3a8-c07683b17852

你可能感兴趣的:(QT,C++)