Qt Обработка ошибок CSS - PullRequest
       9

Qt Обработка ошибок CSS

1 голос
/ 26 января 2012

У меня есть приложение, которое пишет свою собственную таблицу стилей, основанную на пользовательском вводе. Он изменяет фоновые цвета / изображения отдельных виджетов с помощью выбора пользователя.

Всякий раз, когда я начинаю использовать эту функцию, все работает идеально. Тем не менее, в конечном итоге все останавливается. В окно не вносятся визуальные изменения, хотя таблица стилей постоянно добавляется и устанавливается в приложении.

Поскольку при генерации 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).
Есть ли видимые виджеты, которые не поддерживают эти свойства?
(что может стать источником моей проблемы!)


Я попытался поместить SS в Validator, и вот два фрагмента 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 тысяча сорок-девять
питон 2.7.2
Windows 7

1 Ответ

3 голосов
/ 27 января 2012

Глядя на пример 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 Validator дает:

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

для:

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

Но протестированные мной браузеры (Opera, Firefox) были достаточно умны, чтобы их игнорировать и продолжать.Судя по всему, синтаксический анализатор Qt CSS не устраивает подобные ошибки.

...