• 【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);

            即:用完全透明的画刷来刷一下编辑框的背景即可!

            而其父窗口在该位置处刷图片,关键是注意这个父窗口是不是顶层窗口(其有无父窗口),若是则注意不能使用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() 的区别)。

    关于这两个问题,请参看

    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

     

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/09/5571088.aspx

  • 相关阅读:
    一个纠结的问题
    打开SQL Developer时,提示缺少快捷方式
    打开eclipse时,An error has occurred. See the log file
    bash: id : command not found
    Fatal error: Call to undefined function: mysql_connect()解决方法
    struts.xml中标签自动提示问题
    Hibernate向Oracle中添加自增字段
    linux 忘记root密码的解决办法
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
    Ctrl+Alt+Fn不能切换到字符界面
  • 原文地址:https://www.cnblogs.com/huty/p/8518053.html
Copyright © 2020-2023  润新知