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)
}
效果正如我們想想的那樣:
http://blog.csdn.net/linpuliang/article/details/38725339