silvansky programming stuff

25Mar/110

my damaged brain…

Долго мучился, пока не почитал мануалы. В нужном месте.
Оказывается, что если хочешь для прямого наследника QWidget'а установить background-image через setStyleSheet(), то надо ему переопределить paintEvent():

class MyCustomWidget : public QWidget
{
  Q_OBJECT
  // ...
}

void MyCustomWidget::paintEvent(QPaintEvent *)
{
  QStyleOption opt;
  opt.init(this);
  QPainter p(this);
  style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

* This source code was highlighted with Source Code Highlighter.

http://doc.qt.nokia.com/4.7/stylesheet-reference.html#list-of-stylable-widgets - там в самом конце.

4Oct/100

QMenuBar, symbian

Лучше не пытайтесь кастомизировать стандартные меню (те, которые вешаются на софткеи) симбиана с помощью stylesheet'ов! Я вот попытался. В итоге вместо стандартных меню получил пустоту (просто не отрисовались они), при попытке нажать на них клик передаётся окну под моим.

В общем, для реализации своего меню со своим дизайном пришлось создавать QToolBar + QToolButton'ы с меню. Смотрится гораздо лучше. А хоткеи навесить легко с помощью QAction'ов.

3Jun/100

как выдрать редактор 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

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