Валентин Сильванский (v_silvansky) wrote,
Валентин Сильванский
v_silvansky

Category:

как выдрать редактор QSS (Qt StyleSheets) из QtDesigner

в QtDesigner'е есть очень хорошая штука - редактор StyleSheet'ов. он соответственно имеет подсветку CSS. а значит, это может быть полезно.
в моём случае это не только полезно, но и нужно, так как избавляет от необходимости с нуля писать эту самую подсветку.
где взять?
качаем исходники Qt, заходим в tools/designer/src/lib/shared/ и находим там файлы stylesheeteditor.cpp и stylesheeteditor_p.h
после их изучения приходим к выводу, что нужны нам другие файлы: csshighlighter.cpp и csshighlighter_p.h
дальше что делать понятно.

с подсветкой синтаксиса всё понятно. но что же делать с валидацией? тут обратим внимание на отвергнутые в начале файлы и увидим там функцию StyleSheetEditorDialog::isStyleSheetValid, которая юзает namespace QCss, который опять таки не публичный и который надо копать...

копаем сюда: src/gui/text/ файлы qcssparser_p.h и qcssparser.cpp. это всё тянет за собой qcssscanner.cpp.

в общем, теперь можно приступать к сборке "с миру по нитке" своего редактора stylesheet'ов с валидацией и подсветкой.
а если хочется ещё и вставку и редактор градиентов........... то надо копать в сторону QtGradientViewDialog. ищите и обрящете! обращем же этот диалог в tools/shared/qtgradienteditor/
пока всё.

UPD: после детального изучения данного вопроса и долгого ковыряния в исходниках Qt, был написан тестовый проект, который включает в себя этот самый редактор QSS.
вот то, что реально вошло в проект и нужно для работы редактора без интеграции с дизайнером:

csshighlighter.*
qdesigner_utils.*
stylesheeteditor.*
[DIR] qtgradienteditor

разумеется, пришлось выбросить работу с ресурсами. кроме того, градиенты хранятся только для текущего запуска. можно сделать их сохранение, но пока не хочется...
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments