2012-01-26 2 views
1

У меня есть приложение, которое пишет собственную таблицу стилей, основанную на пользовательском вводе. Он изменяет фоновые цвета/изображения отдельных виджетов с помощью пользовательского выбора.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 ...)

EDIT: @ Аварисе:

К сожалению, этот сломанный 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

+0

Я установил, что должен использовать background-repeat: repeat вместо repeat-xy, но -xy работал! –

+0

Можете ли вы показать пример «сломанного» CSS (минимально, если это возможно)? – Avaris

+0

Есть два примера, которые считаются нарушенными валидатором, хотя они отлично работают в QSS. У меня возникли трудности с воспроизведением сломанной таблицы стилей через программу сейчас! >: | –

ответ

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. W3C Validator дает:

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

для:

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

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

Смежные вопросы