Qt中添加背景圖片的方法

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   sp   檔案   div   

Qt中添加背景圖片的方法 1. QPalette的方法
#include <QApplication>
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    
    QFrame *frame = new QFrame;
    frame->resize(400,700);
    QPixmap pixmap("images/frame.png");
    QPalette   palette;
    palette.setBrush(frame->backgroundRole(),QBrush(pixmap));
    frame->setPalette(palette);
    frame->setMask(pixmap.mask());  //可以將圖片中透明部分顯示為透明的
    frame->setAutoFillBackground(true);
    frame->show();

    return app.exec();
}注意圖片路徑怎麼表示,我的圖片放在該工程下的images檔案夾中。
存在問題:圖片可以顯示出來,但是圖片大小不能和frame大小一致,顯示效果不好,具體怎樣調整大小,以後再補充,效果如下(設定了透明的,好像很漂亮~透明部分將我的案頭顯示出來了~_~):


2.setStyleSheet方法(非常好用的方法)
#include <QApplication>
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    QFrame *frame = new QFrame;
    frame->setObjectName("myframe");
    frame->resize(400,700);
    frame->setStyleSheet("QFrame#myframe{border-image:url(images/frame.png)}" );
    frame->show();

    return app.exec();
}效果如下:

注意:很漂亮的效果吧~~注意代碼中紅線的部分噢,設定ObjectName後,才能保證setStyleSheet只作用在我們的frame上,不影響其子控制項的背景設定。之所以用border-image而不用background-image,還是上面的問題,用background-image不能保證圖片大小和控制項大小一致,圖片不能完全顯示,這個以後再補充了,現在還沒有找到方法。

3.paintEvent事件方法
//myframe.h檔案
#ifndef MYFRAME_H
#define MYFRAME_H

#include <QWidget>
#include <QtGui>

class MyFrame : public QWidget
{
public:
    MyFrame();
    void paintEvent(QPaintEvent *event);
};

#endif // MYFRAME_H

//myframe.cpp檔案
#include "myframe.h"

MyFrame::MyFrame()
{
}

void MyFrame::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,400,700,QPixmap("images/frame.png"));
}

//main.cpp檔案
#include <QApplication>
#include <QtGui>

#include "myframe.h"

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    
    MyFrame *frame = new MyFrame;
    frame->resize(400,700);
    frame->show();

    return app.exec();
}效果如下:

註:跟前面一樣的效果吧,與前面的差別就是這個背景圖片不隨著視窗的大小而變化,因為它的固定大小被設定成(400,700)了。重寫QWidget的paintEvent事件,當控制項發生重繪事件,比如show()時,系統就會自動調用paintEvent函數。


好了,上面是三種設定背景圖片的方法,下面我要說一個設定QPushButton的背景圖片的方法,用的是setIcon方法(其實QPushButton設定背景圖片也可以用前面三種方法的,不過現在這種Icon方法的看起來也不錯)
#include <QApplication>
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);

    QFrame *frame = new QFrame;
    QPushButton * button0 = new QPushButton(frame);
    QPushButton * button1 = new QPushButton(frame);
    QPushButton * button2 = new QPushButton(frame);
    QPushButton * button3 = new QPushButton(frame);
    QPushButton * button4 = new QPushButton(frame);
    QPushButton * button5 = new QPushButton(frame);

    frame->setObjectName("myframe");
    frame->resize(400,700);
    frame->setStyleSheet("QFrame#myframe{border-image:url(images/frame.png)}" );

    button0->setGeometry(60,150,68,68);
    button1->setGeometry(160,150,68,68);
    button2->setGeometry(260,150,68,68);
    button3->setGeometry(60,280,68,68);
    button4->setGeometry(160,280,68,68);
    button5->setGeometry(260,280,68,68);

    QIcon icon;
    QPixmap pixmap0("images/SMS.png");
    icon.addPixmap(pixmap0);
    button0->setIcon(icon);
    button0->setIconSize(QSize(68,68));
    button0->setFixedSize(pixmap0.size());
    button0->setMask(pixmap0.mask());


    QPixmap pixmap1("images/EMail.png");
    icon.addPixmap(pixmap1);
    button1->setIcon(icon);
    button1->setIconSize(QSize(68,68));
    button1->setFixedSize(pixmap1.size());
    button1->setMask(pixmap1.mask());


    QPixmap pixmap2("images/Contacts.png");
    icon.addPixmap(pixmap2);
    button2->setIcon(icon);
    button2->setIconSize(QSize(68,68));
    button2->setFixedSize(pixmap2.size());
    button2->setMask(pixmap2.mask());

    QPixmap pixmap3("images/Calendar.png");
    icon.addPixmap(pixmap3);
    button3->setIcon(icon);
    button3->setIconSize(QSize(68,68));
    button3->setFixedSize(pixmap3.size());
    button3->setMask(pixmap3.mask());


    QPixmap pixmap4("images/GoogleVoice.png");
    icon.addPixmap(pixmap4);
    button4->setIcon(icon);
    button4->setIconSize(QSize(68,68));
    button4->setFixedSize(pixmap4.size());
    button4->setMask(pixmap4.mask());


    QPixmap pixmap5("images/AndroidMarket.png");
    icon.addPixmap(pixmap5);
    button5->setIcon(icon);
    button5->setIconSize(QSize(68,68));
    button5->setFixedSize(pixmap5.size());
    button5->setMask(pixmap5.mask());


    frame->show();

    return app.exec();
}效果如下:

註:表徵圖效果不錯吧~_~

好了,今天就寫到這裡,以後有新的內容再補充。
補充,這樣就可以讓圖片跟視窗一樣大小了。
int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    
    QFrame *frame = new QFrame;
    frame->resize(400,700);

    QImage image1;
    image1.load("images/frame1.jpg");
    QImage image2 = image1.scaled(400,700);

    QPalette   palette;
    palette.setBrush(frame->backgroundRole(),QBrush(image2));
    frame->setPalette(palette);
    frame->setMask(pixmap.mask());  //可以將圖片中透明部分顯示為透明的
    frame->setAutoFillBackground(true);
    frame->show();

    return app.exec();
}

Qt中添加背景圖片的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.