Qt CSS的错误处理
我有一个应用程序,它会根据用户的输入生成自己的样式表。用户可以选择不同的背景颜色或图片来改变每个小部件的外观。
每次我开始使用这个功能时,一切都运行得很好。但是,过了一段时间后,程序就会变得很慢,窗口上没有任何视觉变化,尽管样式表还在不断添加和应用。
因为在生成CSS时涉及到一些复杂的字符串处理,我猜可能是CSS中出现了错误,导致Qt无法正确解析所有内容。
我找不到这个错误!我的CSS始终是这样的格式:
"#widget { 'correctly formatted properties';} #nextwidget..."
我知道(通过算法的限制和检查损坏的CSS文件)每个小部件的属性在语法上都是正确的。
不过,我注意到这样做...
#widget {color: ;}
...并不会阻止Qt解析其余的字符串,但使用一些不存在的属性(比如 { goose: 2 }
)就会导致问题。
那么,Qt会忽略哪些类型的错误,又是什么导致它停止解析文件的其余部分呢?我在Qt的文档中找不到相关的列表或信息。
(实际上,PyQt4包中甚至没有样式表的文档。)
在我的CSS中,我对用户选择的每个小部件都应用...
{color: x; background-image:, y, background-color: z }
(x、y、z是正确的替代值)。
有没有一些可见的小部件不支持这些属性?
(这可能是我问题的根源!)
我尝试把样式表放入一个验证器中,这里有两个导致错误的CSS片段,我不知道为什么会出错!
#centralwidget { color: #ffffff ;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaff00, stop: 1 #aac300)
}
还有...
#Display { background-image: url('+NewTextureFile+');
background-repeat: repeat-xy;
}
如果有人能帮我解决这些问题,我会非常感激!
(我想大家都能看出来,我一直在努力学习CSS...)
编辑: @ Avaris:
抱歉,这段损坏的CSS不是最小化的;我不知道哪部分出错了!
我怀疑是因为我没有用';'结束所有属性。
#tab{color: #000000 ;background-color: #ff0000 } #tab{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy; } #Amount_Unit{color: #000000 ;background-color: #aaff00 } #Conc_Unit2{color: #000000 ;background-color: #aaff00 } #pushButton{color: #000000 ;background-color: #aaff00 } #tab_2{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy; } #RMM_Output{color: #000000 ;background-color: #aaff00 } #Conc_Unit1{color: #000000 ;background-color: #aaff00 } #UnitText{color: #000000 ;; } #Amount_Input{color: #000000 ;; } #Concentration_Input{color: #000000 ;; } #Amount_Output{color: #000000 ;; } #Subshell_Element{color: #000000 ;background-color: #00aaff } #Charge{color: #000000 ;background-color: #00aaff } #Simple_Config{color: #000000 ;background-color: #00aaff } #Actual_Config{color: #000000 ;background-color: #00aaff } #Save_Simple_Button{color: #ffffff ;background-color: #aaff00 } #Save_Actual_Button{color: #ffffff ;background-color: #aaff00 } #pushButton_2{color: #ffffff ;background-color: #aaff00 } #centralwidget{color: #ffffff ;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaff00, stop: 1 #aac300) } #pushButton_3{color: #000000 ;background-color: #ff0000 } #Calculate_Proportions_Button{color: #000000 ;background-color: #f80000 } #{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy; } #tab_4{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy; } #LayoutContainer1{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy; } #AmountInput{color: #ffaa00 ;background-color: #ffff00 } #tab_5{color: #000000 ;background-color: #ffffff } #menubar{color: #000000 ;background-color: #ffffff } #tabWidget{color: #000000 ;background-color: #ffffff } #Reaction_Element_Holder{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy; }
谢谢你的阅读!
PyQt4
python 2.7.2
Windows 7
1 个回答
看这个例子中的CSS,有一个没有名字的ID
选择器:
#tab{color: #000000 ;background-color: #ff0000 }
/* ... */
#{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy; } #
/* ... */
#Reaction_Element_Holder{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy; }
这个选择器让解析器崩溃了,导致后面的CSS都变得无效。
顺便提一下,没有名字的ID
选择器其实是无效的CSS。W3C验证工具会给出:
Parse Error Lexical error at line 1, column 2. Encountered: "{" (123), after : "#"
对于:
#{ color: blue; }
body { color: red; }
不过我测试过的浏览器(比如Opera和Firefox)足够聪明,可以忽略这个错误并继续运行。显然,Qt的CSS解析器对这种错误就不太能接受了。