Qt 设置窗口背景图片的几种方法实例
1.在paintEvent事件中繪制圖片
void Widget::paintEvent(QPaintEvent * ev) {QPainter painter(this);painter.drawPixmap(rect(),QPixmap(":/bg.jpg"),QRect()); }drawPixmap在Widget的整個矩形區域繪制背景圖片,第三個參數為要繪制的圖片區域,傳入空的矩形表示整個圖片區域。通過這種方式可以將圖片平鋪到窗口上,缺點就是要使用paintEvent事件需要新建一個類,不適合子窗口。
2.使用調色板QPalette來設置圖片
QPalette pal =this->palette(); pal.setBrush(QPalette::Background,QBrush(QPixmap(":/bg.jpg"))); setPalette(pal);首先獲得Widget的調色板,然后設置設置調色板背景(setBrush),最后將調色板設置到Widget中。
3. 使用樣式表(setStyleSheet)
使用樣式表可以很方便設置界面,而且非常高效,還能讓界面和邏輯分離。真的是Qt里非常好用的一個東西,設置背景圖片的語句也很簡單.
setStyleSheet("border-image:url(:/bg.jpg)");一句話就搞定了,這里使用border-image屬性可以讓圖片平鋪到窗口,效果與第二點一樣。不過在本例中由于Widget是頂層窗口,所以直接設置樣式表也不會顯示。所以樣式表比較適合子窗口來使用。
注意這三者的使用:
4.使用間接的方式來設置背景
比如說在窗口上覆蓋一個QLabel,這個label始終與窗口一樣大。然后在label中設置圖片,視覺效果上和直接給窗口設置背景圖片一樣。
Widget::Widget(QWidget *parent) :QWidget(parent) {m_lblBg = new QLabel(this);m_lblBg ->setPixmap(QPixmap(":/bg.jpg"));m_lblBg ->setScaledContents(true); } void Widget::resizeEvent(QResizeEvent * ev) {m_lblBg->resize(this->size()); }創建一個label作為Widget的子窗口,然后設置圖片。通過在Widget的resizeEvent事件中設置label的大小與Widget一致。這里需要注意調用QLabel的setScaledContents(true),否則效果和第一種一樣。由于QLabel可以用來顯示動圖因此使用這種方式可以實現窗口的動態背景圖片。
如果你用的是界面類的話,你還可以通過Widget等畫布,放大到和窗口一樣大小,然后再畫布上加載圖片,從而達到設置背景圖的效果。
/***************************
主界面設置背景一般有設置背景圖片和背景顏色的需求,其實二者之間設置方法類似
目錄
主界面設置背景一般有設置背景圖片和背景顏色的需求,其實二者之間設置方法類似
方法一:最簡單的方式是通過ui界面來設置,例如設置背景圖片
?
方法二 :通過代碼設置窗口的palette屬性來實現
方法三:通過重寫paintEvent事件,來設置背景圖片和背景顏色
方法四:通過代碼中設置樣式表,其與方法一類似
首先說明一下background-image、border-image、image三種區別
background-image:簡單理解就是將圖片從部件的左上角開始貼圖,部件的大小限制了顯示圖片范圍;好比是我們按照部件的大小來裁剪圖片
border-image:就是將貼圖縮放進到部件里,部件能看到完整圖片,但是此時圖片會被壓縮的變形
iamge:部件會按照圖片的原始大小進行填充
方法一:最簡單的方式是通過ui界面來設置,例如設置背景圖片
在添加資源的下拉框有三種方式:
?
選擇background-image之后會有個問題,就是窗口上的其它子部件也會貼上圖,如下:
?
?這種添加方式會讓所有部件都會貼圖,肯定不行;需要把background-image: url(:/image/background.png);放在#MainWindow{}里(MainWindow為主窗口的對象名),意思就是只針對主窗口設置有效,子部件無用;
?設置前 ? ? ?
? ? ? ? 設置后
?背景色設置和背景圖片設置也是一樣的道理,如果不想窗口中的部件顏色和主窗口一樣,也是需要#MainWindow來設置限定范圍
?
?設置完效果如下:
?
方法二 :通過代碼設置窗口的palette屬性來實現
1)背景圖片設置
QPixmap pixmap=QPixmap(":/image/background.png").scaled(this->size());
QPalette palette;
//設置主窗口背景圖片
palette.setBrush(QPalette::Window,QBrush(pixmap));
2).背景顏色設置
QPalette palette;
//設置主窗口背景顏色
palette.setColor(QPalette::Window,QColor(255, 150, 30));
this->setPalette(palette);
方法三:通過重寫paintEvent事件,來設置背景圖片和背景顏色
1)設置背景圖片
void MainWindow::paintEvent(QPaintEvent *)
{
? ? QPainter painter(this);
?
? ? QPixmap pixmap(":/image/background.png");
? ? painter.drawPixmap(this->rect(),pixmap);
?
}
2)設置背景顏色
void MainWindow::paintEvent(QPaintEvent *)
{
? ? QPainter painter(this);
?
? ? QColor color(255, 150, 30);
? ? painter.setBrush(color);
? ? painter.drawRect(this->rect());
}
方法四:通過代碼中設置樣式表,其與方法一類似
1)設置主窗口背景圖片
this->setStyleSheet("QMainWindow {background-image:url(:/image/background.png)}");
2).設置主窗口背景顏色
this->setStyleSheet("QMainWindow {background-color:rgb(255, 150, 30)}");
?
?
總結
以上是生活随笔為你收集整理的Qt 设置窗口背景图片的几种方法实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: es6 迭代器(遍历器)Iterator
- 下一篇: python pie函数_matplot