zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
    HDU 1281 棋盘游戏 【二分图最大匹配】
    Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
    Codeforces Round #527 (Div. 3) D2. Great Vova Wall (Version 2) 【思维】
    Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1) 【思维】
    Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】
    Avito Cool Challenge 2018 E. Missing Numbers 【枚举】
    Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】
    005 如何分析问题框架
    004 如何定义和澄清问题
  • 原文地址:https://www.cnblogs.com/huty/p/8518052.html
Copyright © 2011-2022 走看看