【Qt開發】QTextEdit 外觀屬性設定
一、給QTextEdit新增背景圖片,有下面兩種方法:
QTextEdit* iEdit = new QTextEdit();
1:使用樣式表:
iEdit->setStyleSheet("background-image:url(:/bmp/DSCN1604.JPG)");
注意:在url()括號中首先開始的 “:”冒號一定不能搞錯,否則就顯示不出來。
2:使用html
iEdit->setHtml("<body background=/"./bmp/DSCN1604.JPG/"> </body>");
注意:此時就不需要像上邊那樣用“:”冒號了,直接用相對路徑就可以了。
(Notice:在使用上兩種方法之前,別忘記把圖片加到qrc資原始檔中哦)
//-------------------------------------------------------------------------------------------------------------------------------------------------
上述兩種方法其實顯示效果都是一樣的,所以用哪個都差不多,但是他們都存在兩個問題:
問題一:圖片無法縮放以與編輯框大小相符,畢竟這裡用的是圖片的路勁,我們沒法對其進行一些縮放操作。所以最好在使用之前就先讓編輯框大小和圖片大小設定為一樣!
問題二:這個比較嚴重。
當我們寫的文字超過一屏時:編輯框需要翻頁,此時你會發現:圖片也會跟著翻頁。
如下:我在編輯框中放了一張背景圖片:
我當然希望這張圖片一直固定在該編輯框後邊,而不會翻動,但是如果我用上邊的方法給設定一個背景圖片的話,當寫的字多於一螢幕時候:圖片也會跟著翻屏,從而可能出現如下情況:
亦即:圖片也會平鋪的多次刷在編輯框後邊,這顯然不是我們希望的效果。
解決這個的方法就是把QTextEdit設定為透明,然後再他後面的widget上設定背景圖片,這樣就OK了
設定QTextEdit透明的方法
在Qt中所有問題都要分兩種體系來討論,一種是QWidget體系,一種則是QGraphicsWidget體系。此處也不例外。
一: 對於QWidget體系而言:亦即用的都是QWidget以及其派生類。對於此處:亦即QTextEdit的父物件也是QWidget或其派生類。
那麼我們要做的就是:讓QTextEdit背景變為透明,而後在其後邊的父視窗該位置處刷上圖片。
①設定QTextEdit為背景透明:
QPalette pl = iEdit->palette();
pl.setBrush(QPalette::Base,QBrush(QColor(255,0,0,0)));
iEdit->setPalette(pl);
即:用完全透明的畫刷來刷一下編輯框的背景即可!
二:對於QGraphicsWidget體系,則用如下方式來設定,這裡我直接用程式碼了:
MainWindow::MainWindow(QWidget *parent)
: QGraphicsView(parent)
{
this->resize(360,640);
iScene = new QGraphicsScene(0,0,360,640);
iEdit = new QTextEdit();
iEdit->resize(360,400);
//下邊這段給父view刷圖片
QPalette palette;
palette.setBrush(this->backgroundRole(),QBrush(QImage(":/bmp/dou.jpg")));
this->setPalette(palette);
//此段負責設定該編輯框item背景透明
palette.setBrush(QPalette::Base,QBrush(QColor(255,0,0,0)));
iEdit->setPalette(palette);
QGraphicsProxyWidget* widget = iScene->addWidget(iEdit);
palette.setBrush(QPalette::Window,QBrush(QColor(255,0,0,0)));
widget->setPalette(palette);
this->setScene(iScene);
}
可見,這其中還是有很大區別的,而且似乎有些地方難以理解,其實關鍵這裡邊牽扯兩個問題,一個是QWidget體系和QGraphicsWidget體系的區別是什麼? 一個是用樣式表QPalette設定背景顏色/圖片的兩種方法的區別(亦即:QPalette的setBrush()函式的第一個引數是QPalette::Base形式 還是 ptr->backgrounRole() 的區別)。
關於這兩個問題,請參看
1:QWidget體系與QGraphicsWidget體系之間的區別
2:Qt中如何使用樣式表QPalette以及相關注意事項