silvansky programming stuff

8Jul/110

Rambler-Contacts

Выложили свои труды на гитхаб.
А что, пусть висят!
https://github.com/Rambler-ru/Contacts

6Apr/110

assert

Наткнулся в коде (/src/gui/dialogs/qinputdialog.cpp):

void QInputDialog::setInputMode(InputMode mode)
{
    Q_D(QInputDialog);
 
    QWidget *widget;
 
    /*
        Warning: Some functions in QInputDialog rely on implementation details
        of the code below. Look for the comments that accompany the calls to
        setInputMode() throughout this file before you change the code below.
    */
 
    switch (mode) {
    case IntInput:
        d->ensureIntSpinBox();
        widget = d->intSpinBox;
        break;
    case DoubleInput:
        d->ensureDoubleSpinBox();
        widget = d->doubleSpinBox;
        break;
    default:
        Q_ASSERT(mode == TextInput);
        d->chooseRightTextInputWidget();
        return;
    }
 
    d->setInputWidget(widget);
}

switch просто поразил своим ассертом в default'е! )

Tagged as: , , , No Comments
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

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