Название: Box model и style sheets Отправлено: xokc от Февраль 07, 2012, 22:39 В соответствии с http://developer.qt.nokia.com/doc/qt-4.8/stylesheet-customizing.html#box-model
при использовании style sheets каждому виджету можно установить некую box model. Пусть имеется наследник QWidget в котором переопределен метод paintEvent и установлена следующая таблица стилей: Код Как мне внутри paintEvent определить установленные значения margin, border-width и padding? Название: Re: Box model и style sheets Отправлено: andrew.k от Февраль 07, 2012, 23:17 может быть QWidget::style()
Еще такой класс есть QStylePainter Оттуда два примера (думаю это не то, что нужно, но есть куда копать) Код
поверхностно знаком с этими классами. Думаю в ассистанте есть примеры. Еще QStyleOption можно глянуть. Название: Re: Box model и style sheets Отправлено: xokc от Февраль 07, 2012, 23:24 И где в этих примерах ширина border, margin и padding?
StyleOption тоже не помогает. Там только rect есть и он всегда совпадает с rect() от самого QWidget, т.е. никак не учитывает значений, заданных в style sheet. Название: Re: Box model и style sheets Отправлено: andrew.k от Февраль 07, 2012, 23:39 И где в этих примерах ширина border, margin и padding? Я думаю, drawPrimitive и иже с ним рисуют уже с учетом установленного стиля.StyleOption тоже не помогает. Там только rect есть и он всегда совпадает с rect() от самого QWidget, т.е. никак не учитывает значений, заданных в style sheet. Видимо, если виджет совсем кастомный, то эти классы не помогут. Хз. Название: Re: Box model и style sheets Отправлено: andrew.k от Февраль 07, 2012, 23:52 Думаю тебе стоит читать этот (http://developer.qt.nokia.com/doc/qt-4.8/style-reference.html) не маленький раздел.
Вот у QStyle есть еще такая функция pixelMetric (http://developer.qt.nokia.com/doc/qt-4.8/qstyle.html#pixelMetric) Первым параметром идет enum QStyle::PixelMetric Цитировать This enum describes the various available pixel metrics. A pixel metric is a style dependent size represented by a single pixel value Кажется "оно!". Название: Re: Box model и style sheets Отправлено: xokc от Февраль 08, 2012, 00:00 drawPrimitive определяет где рисовать с помощью класса QRenderRule, имеющего в том числе вроде-бы нужные методы:
Код
Но класс этот определен внутри qstylesheet.cpp и недоступен пользователю. Внутри же этих методов производятся манипуляции с рядом QSharedDataPointer<QStyleSheetBoxData> b, QSharedDataPointer<QStyleSheetBorderData> bd и т.п., которые вообще заполняются Бог знает где. Название: Re: Box model и style sheets Отправлено: andrew.k от Февраль 08, 2012, 00:24 Вот (http://stackoverflow.com/questions/1019510/custom-styles-for-custom-widgets-in-qt) твой случай.
Обрати внимание. Warning: Qt style sheets are currently not supported for custom QStyle subclasses. We plan to address this in some future release. Название: Re: Box model и style sheets Отправлено: xokc от Февраль 08, 2012, 00:25 Думаю тебе стоит читать этот (http://developer.qt.nokia.com/doc/qt-4.8/style-reference.html) не маленький раздел. Читал уже.Вот у QStyle есть еще такая функция pixelMetric (http://developer.qt.nokia.com/doc/qt-4.8/qstyle.html#pixelMetric) Первым параметром идет enum QStyle::PixelMetric Цитировать This enum describes the various available pixel metrics. A pixel metric is a style dependent size represented by a single pixel value Кажется "оно!".Нифига не оно. Только для бордер удается получить ширину если для всех сторон рамки она одинаковая (QStyle::PM_DefaultFrameWidth). Все остальные параметры скорее относятся к текущему QStyle, а не к конкретному QWidget с переопределенным stylesheet. Название: Re: Box model и style sheets Отправлено: xokc от Февраль 08, 2012, 00:29 Вот (http://stackoverflow.com/questions/1019510/custom-styles-for-custom-widgets-in-qt) твой случай. Там несколько о другом речь идет. Программер хочет создавать нестандартные контролы и расширить синтаксис style sheet для них. Я же хочу совсем другого - понимать какие из параметров контрола изменены с помощью стандартного style sheet.Название: Re: Box model и style sheets Отправлено: andrew.k от Февраль 08, 2012, 00:33 Вот (http://stackoverflow.com/questions/1019510/custom-styles-for-custom-widgets-in-qt) твой случай. Там несколько о другом речь идет. Программер хочет создавать нестандартные контролы и расширить синтаксис style sheet для них. Я же хочу совсем другого - понимать какие из параметров контрола изменены с помощью стандартного style sheet.I want to develop some custom controls that are not based entirely on existing drawing primitives and sub-controls. Since the entire application should be skinnable, I want to rely on custom styles, possible on style sheets as well. Явно твой случай. А как вариант решения, он думал писать свои классы стилей. Название: Re: Box model и style sheets Отправлено: xokc от Февраль 08, 2012, 01:07 Явно не мой случай. Я готов использовать исключительно стандартные примитивы. Я не собираюсь делать мое приложение skinnable. Я только хочу понять в каком месте виджета мне рисовать эти примитивы, если в stylesheet указаны значения border, margin или spacing, но не могу понять как мне их получить.
|