当前位置:网站首页>20210306转载如何使TextEdit有背景图片
20210306转载如何使TextEdit有背景图片
2022-07-02 06:22:00 【qq_40938175】
一、给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
边栏推荐
猜你喜欢

构建学习tensorflow

分布式事务 :可靠消息最终一致性方案

Pbootcms collection and warehousing tutorial quick collection release

Idea announced a new default UI, which is too refreshing (including the application link)

IPv6 experiment and summary

最新CUDA环境配置(Win10 + CUDA 11.6 + VS2019)

BGP报文详细解释

Monitoring uplink of VRRP

TensorRT的数据格式定义详解

Linked list (linear structure)
随机推荐
阿里云MFA绑定Chrome浏览器
Mech 3002 explanation
Sentinel规则持久化到Nacos
标签属性disabled selected checked等布尔类型赋值不生效?
It is said that Kwai will pay for the Tiktok super fast version of the video? How can you miss this opportunity to collect wool?
BGP 路由优选规则和通告原则
PgSQL学习笔记
Distributed transactions: the final consistency scheme of reliable messages
The difference between session and cookies
FE - Eggjs 结合 Typeorm 出现连接不了数据库
LeetCode 27. 移除元素
When requesting resttemplate, set the request header, request parameters, and request body.
Linear DP (split)
Linked list (linear structure)
ModuleNotFoundError: No module named ‘jieba.analyse‘; ‘jieba‘ is not a package
找到页面当前元素z-index最高的数值
Sparse array (nonlinear structure)
LeetCode 39. Combined sum
NodeJs - Express 中间件修改 Header: TypeError [ERR_INVALID_CHAR]: Invalid character in header content
Flask-Migrate 检测不到db.string() 等长度变化