• 如何使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

  • 相关阅读:
    P3382 【模板】三分法
    1269: [AHOI2006]文本编辑器editor
    1500: [NOI2005]维修数列
    4196: [Noi2015]软件包管理器
    django 表单系统 之 forms.ModelForm
    django 表单系统 之 forms.Form
    django ORM 批量操作:批量插入bulk_create
    django 多数据库时 ORM语句 选择数据库
    django 配置 多数据库
    django模板复用 extends,block,include
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2646192.html
Copyright © 2020-2023  润新知