1. 程式人生 > >【Qt開發】QTextEdit 外觀屬性設定

【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以及相關注意事項