2012-01-26 7 views
1

ユーザー入力に基づいて独自のスタイルシートを作成するアプリケーションがあります。これは、ユーザの選択により、個々のウィジェットの背景色/画像を変更する。CSSのQtエラー処理

この機能の使用を開始すると、すべてが完璧に機能します。しかし、最終的に物事は止まる。スタイルシートが継続的にアプリケーションに追加され、アプリケーションに設定されていても、ウィンドウは視覚的に変更されません。

CSSの生成にはいくつかの強力な文字列操作が含まれているため、Qtがすべてを解釈することを中止しているCSSにはいくつかのエラーがあります。

このエラーは見つかりませんでした。私のCSSは、各ウィジェットに設定されたプロパティが構文的に正しいことを、

"#widget { 'correctly formatted properties';} #nextwidget..." 

私は事実を(アルゴリズムの限界によると、壊れたCSSファイルをチェックして)知っているの形式で常にあります。い:

私は... ...しかし

#widget {color: ;} 

をこれを行うことは、文字列の残りの部分を解釈するが、非既存のプロパティ({ goose: 2 }など)を使用してからのQtを停止しないことに注意してください。

Qtはどのようなエラーを無視し、残りのファイルの解釈を停止するのでしょうか?私はQtのドキュメントでリストのようなものを見つけられませんでした。
(実際には、PyQt4パッケージでも、任意のスタイルシートのドキュメントがありません。)私のCSSの場合は

、私が適用されます...一つ一つのウィジェットに

{color: x; background-image:, y, background-color: z } 

ユーザーが選択する(とx、y、zは正しい字下げである)。
これらのプロパティをサポートしていない目に見えるウィジェットはありますか? (私の問題の原因かもしれない!)


私はバリでSSを入れてみましたし、ここで私はなぜ知らないうちにエラーの原因となった2つの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に私の方法を改善してきた、おそらく明らかだ...)

EDIT: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

+0

確立しましたbackground-repeat:repeat-xyの代わりにrepeatを使うべきですが、-xyが動作しました! –

+0

「壊れた」CSSの例を表示できますか(できるだけ最小限)。 – Avaris

+0

QSSではうまく機能しますが、バリデーターによって壊れていると思われる2つの例があります。今私はプログラムで壊れたスタイルシートを複製するのが難しいです! >:| –

答えて

3

例の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です。用

Parse Error Lexical error at line 1, column 2. Encountered: "{" (123), after : "#" 

:W3C Validatorが与え

#{ color: blue; } 
body { color: red; } 

をしかし、私はテストしたブラウザ(オペラ、Firefoxの)無視して続行するために十分にスマートでした。どうやらQt CSSパーサーはこの種のエラーに悩まされていません。