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

發佈了10 篇原創文章 · 獲贊 7 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章