前言

QSS注释某一部分之后导致后面的控件设置的QSS失效

这大概率是你嵌套注释了,QSS同CSS一样是不允许嵌套注释

原因

如下代码中QWidget#centralwidget已经存在部分注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QWidget{
/* background-color: #48a5fd; */
border-radius: 15px;
font-family:Microsoft Yahei,sans-serif;
outline: none;
}
QWidget#centralwidget{
background-color: #c3f6ff;
border-radius: 15px;
/* background-image: url(:/bg/QSS_IMG/720p.jpg); */
}
QMessageBox {
background-color: rgb(67, 94, 134);
/* border-image: url(:/bg/QSS_IMG/720p.jpg) */
}

如果我们像C++那样直接注释掉QWidget#centralwidget全部QSS内容,变成如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QWidget{
/* background-color: #48a5fd; */
border-radius: 15px;
font-family:Microsoft Yahei,sans-serif;
outline: none;
}
/* QWidget#centralwidget{
background-color: #c3f6ff;
border-radius: 15px;
/* background-image: url(:/bg/QSS_IMG/720p.jpg); */
} */
QMessageBox {
background-color: rgb(67, 94, 134);
/* border-image: url(:/bg/QSS_IMG/720p.jpg) */
}

此时QWidget#centralwidget的注释存在注释嵌套,/*只会匹配后面遇到的第一个*/.这样就会导致后面的}*/没有注释,造成后续QSS内容解析异常,解析器只解析到了QWidget的样式设置,后续的样式解析失败,导致失效。

要解决其实很简单,去掉要注释内容中除了最后的*/即可.

可以这样修改,将不需要的*/修改成* /,即中间加个空格即可,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QWidget{
/* background-color: #48a5fd; */
border-radius: 15px;
font-family:Microsoft Yahei,sans-serif;
outline: none;
}
/* QWidget#centralwidget{
background-color: #c3f6ff;
border-radius: 15px;
/* background-image: url(:/bg/QSS_IMG/720p.jpg); * /
} */
QMessageBox {
background-color: rgb(67, 94, 134);
/* border-image: url(:/bg/QSS_IMG/720p.jpg) */
}

这样注释就正常了,QSS解析也正常了。