初学QT(Day02)

文章讲述了在Qt开发中如何设置窗口背景图片,包括使用setPixmap、setStyleSheet以及setScaledContents函数实现图片自适应。同时,讨论了如何处理父窗口背景影响子控件的问题,通过设置对象名称并在样式表中使用ID选择器来避免。另外,提到了内存管理,指出Qt会在程序结束时自动释放内存,以及未分配内存的成员变量可能导致段错误。
摘要由CSDN通过智能技术生成

今天又是学到很多的一天啊!

设置背景图片的方法

今天开始使用代码来实现昨天做出的界面,并熟悉代码中出现的函数

  • 使用setPixmap
  • 使用setstylesheet中的css语法设置:“background-image:"/“border-image”

昨天说过了border-image是将图片平铺在mainwindow中,是某种意义上的实现了图片自适应窗口,今天又学到了使用setScaledContents()函数,这个是真正意义上的图片自适应

关于父窗口使用背景图片影响到子控件的问题

之前在使用qtdesigner创建界面的时候也遇到了这个问题,解决这个问题的方法是在父控件的stylesheet中加上作用域
比如这个父窗口的名字是mainwindow,那么就使用

#mainwindow{
border-image:url(:/Path/XXX.png) ;
}

使用这种方式可以控制父窗口的背景不会影响到子控件。
同样的,在使用qtcreator开发界面的是候也遇到了这样的问题,解决方法同样是使用父窗口的setstylesheet(),加入上面的代码。但是要注意的是:
父窗口的名字需要重新创建,因为setstylesheet是使用css格式的,作用域的名字要使用setObjectName()重新定义,作为一个唯一的标识符
下面是一个示例代码

QLabel* labell=new QLabel(this);
labell->setObjectName("Labell");
labell->setStyleSheet("#Labell{Font-family:宋体;}");

虽然在chatgpt上提问,回答是可以使用,也可以不使用
回答如下

在 Qt 中,setObjectName() 函数用来给控件设置一个唯一的名称标识符。这个名称可以在代码中用来查找和操作控件,并且还可以在样式表中使用 ID 选择器来限定样式的作用范围。

具体来说,当您调用 setObjectName() 函数为一个控件设置名称时,它会将该名称存储在控件的属性中。这个名称可以被其他部分的代码用来查找并操作这个控件。例如,您可以使用 findChild() 函数在父窗口中查找特定名称的子控件,或者在信号槽连接中使用名称来指定信号源和槽接收器。

此外,当您在样式表中使用 ID 选择器时,您需要为控件设置一个唯一的名称才能使选择器生效。如果没有设置名称,样式表中的 ID 选择器无法与控件匹配,并且样式不会应用到相应的控件上。

因此,使用 setObjectName() 函数可以让您更容易地查找和操作控件,并且可以让您使用 ID 选择器来限定样式的作用范围。在实际使用中,我们建议为所有的主要控件(如窗口、对话框、工具栏等)设置名称,以方便管理和维护代码。

在设置样式表时不一定需要为控件设置对象名称。如果您只是想为单个控件设置样式,那么可以直接在控件的构造函数或初始化代码中使用 setStyleSheet() 函数来指定样式。

在QT中不用担心申请的空间不会被释放的问题

因为在程序结束时,Qt会自动使用析构函数释放内存

关于段错误的问题

一定要注意在头文件中定义的变量,在对应的源文件中需要申请内存空间,如果一个没有申请内存空间的成员变量被使用,那么就可能出现段错误,同时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值