如何使QTextEdit背景透明(轉)


前邊的文章http://blog.csdn.net/NRC_DouNingBo/archive/2010/04/28/5540427.aspx介紹了如何給QTextEdit加背景圖片,但是由於圖片也會跟着翻屏,所以用了一種折中的辦法就是:將QTextEdit設置為透明,而后在其后邊的窗口的該位置處刷上圖片即可。  那這里就說一下如何讓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);

 

        即:用完全透明的畫刷來刷一下編輯框的背景即可!

 

        而其父窗口在該位置處刷圖片,關鍵是注意這個父窗口是不是頂層窗口(其有無父窗口),若是則注意不能使用setStyleSheet()來刷(原因見文章http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/07/5565212.aspx)。

 

 

   二:對於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() 的區別)。

 

      關於這兩個問題, 我過會會寫兩外兩篇文章來專門論述一下,但是上邊代碼你可以直接拷貝拿去用,沒問題的。

 

      測試環境:Qt4.5.0 + VC2005

 

后補:

1:QWidget體系與QGraphicsWidget體系之間的區別

http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/09/5571149.aspx

 

2:Qt中如何使用樣式表QPalette以及相關注意事項

http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/09/5571187.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM