日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt三种方式实现背景色和背景图(都可放缩,qss方式也可以)

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt三种方式实现背景色和背景图(都可放缩,qss方式也可以) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:窗口背景無非兩種,及背景顏色、背景圖片。Qt中窗口背景如何設置?總結以下三種方法。

?

1、QPalette設置背景

2、實現paintEvent,使用QPainter來繪制背景

3、使用QSS來設置背景

---------------------------------------------------------------

關于QSS(樣式表)的使用不想多說,一般我不用QSS設置窗口背景,也不建議使用。(注意:這里是對于窗口而言)。如果是子部件當然可以。因為窗口使用QSS設置背景之后,若子部件不使用同樣的方式來設置,默認則會繼承父窗口的樣式。

? ?? 子部件一般情況下也不需要設置背景圖片,即使需要使用QSS也完全可以滿足。設置較多的是背景色與圖標,QSS中使用background或者background-color的方式可以實現背景色的設置,圖標則可以使用setPixmap或者setIcon來設置!

----------------------------------------------------------------------

一、QPalette設置背景

構造函數中可以使用如下方式:

1)設置背景色

?

QPalette?palette(this->palette());

palette.setColor(QPalette::Background,?Qt::black);

this->setPalette(palette);

?

或:

?

QPalette?palette;

palette.setBrush(this->backgroundRole(),?Qt::black);

this->setPalette(palette);?

?

這里setColor和setBrush都可以使用!

這里需要特別注意一點,如果QWidget直接show出來,是有背景色的,但是如果它作為一個父QWidget的子窗口時就沒有背景了!此時需要添加如下代碼:

?

setAutoFillBackground(true);

?

2)設置背景圖片

?

QPixmap?pixmap?=?QPixmap(":/qm/safe").scaled(this->size());

QPalette?palette(this->palette());

palette.setBrush(QPalette::Background,?QBrush(pixmap));

this->setPalette(palette);

?

上面方式無論設置背景色還是背景圖片QPalette::Background與this->backgroundRole()是等價的!

?

二、paintEvent設置背景

1)設置背景色

?

void?IIIMark::paintEvent(QPaintEvent?*)

{

? ?? QPainter?painter(this);

? ?? painter.setBrush(Qt::black);

? ?? painter.drawRect(this->rect());

}

?

2)設置背景圖片

?

void?IIIMark::paintEvent(QPaintEvent?*)

{

? ?? QPixmap?pixmap?=?QPixmap(":/qm/safe").scaled(this->size());

? ?? QPainter?painter(this);

? ?? painter.drawPixmap(this->rect(),?pixmap);

}

?

?

三、QSS樣式表)設置背景

?

1)設置背景顏色

?

MainWin::MainWin()
{
this->setStyleSheet("background-color: yellow");
iLabel = new QLabel(this);
iLabel->setStyleSheet("background-color: rgba(97%,80%,9%,50%)");
}

?

2)設置背景圖片

?

MainWin::MainWin()
{
this->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");
iLabel = new QLabel(this);
iLabel->setStyleSheet("background-image:url(:/bmp/1257253475842.jpg)");
}

---------------------------------------------------------------

注意

? (1)以上都是用scaled方式對圖片進行了適應窗口大小的設置,因為所給的圖片大小不一定滿足要求,所以采用此方式!當然圖片經過拉伸或者壓縮之后會變形(純色圖片除外),所以對圖片采用此方式時需要注意。

? (2)設置背景范圍的時候如果需要充滿整個窗口最好使用this->rect(),因為我看到很多人在使用QRect(0, 0, 400, 400)之類的語句,那么如果窗口大小改變了呢?此句是不是要跟著變呢?

? (3)如果需要背景圖片或者背景色隨可以發生改變時,也就是所謂的換膚功能,則采用paintEvent的方式,在需要改變的時候使用update()來進行更新。

? (4)this->setAutoFillBackground(true)又讓我想起了tr(),被很多人濫用。這句話在什么時候使用呢?不妨采用QPalette設置背景的方式加上與去掉這句話對比一下(在有父窗口的情況下使用)。如果這個QWidget直接show,則有背景色,如果放到一個父窗口中,就沒有效果。添加該句即可!?

-----------------------------

對比幾種方法:前兩種可以輕松實現圖像的縮放(使用scaled函數),而按照上面使用QSS樣式表設置background-image的方式卻不能實現,若使用樣式表實現靜態圖像的縮放可以設置border-image屬性:

或代碼中:

?

setStyleSheet(QString::fromUtf8("border-image: url(:/png/example.png)"));

這樣當窗口大小改變時圖像也會隨著縮放。

?

原文章:http://blog.163.com/dingmz_frcmyblog/blog/static/21730402320141115552592/

總結

以上是生活随笔為你收集整理的Qt三种方式实现背景色和背景图(都可放缩,qss方式也可以)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。