Pull to refresh

Comments 16

Кстати, СSS в Qt уже умеет рисовать градиенты, тени и прочие прелести?
Вау, клевый топик.
«Страница не найдена (404-я ошибка)»
Извиняюсь… Решил немного подправить, раскрасив код (на момент написания тега source еще не было), и дал не тот линк. Вот правильный: habrahabr.ru/post/48963/
Благодарю, отличный топик! Очень радует наличие скругленных углов и градиентов. Со скругленными углами я уже игрался ранее, а вот градиент — как-то пропустил. Правда, с ним все-равно надо работать очень осторожно, иначе получится безвкусица в стиле windows xp.
Градиент есть. Тени и сглаженные границы реализуются с помощью border-image.
А вот одновременно сделать градиент и какую-нибудь сложную границу скорее всего не получится.
border-image — тоже хорошо. Но после «всплытия» CSS3 мне стало лень возиться с картинками. Когда работаю над веб-интерфейсами, всегда стараюсь их количество сводить к минимуму. Но это не такая уж большая проблема, на самом деле — просто личная прихоть. Да и надо будет попробовать в качестве параметра border-image передать qlineargradient, интересно, будет ли работать…
У CSS по сравнению с этим подходом есть два недостатка. Во-первых, если вы делайте стиль через QStyle, то для того, чтобы использовать его повторно вам нужно скопировать два файла и написать одну строчку кода. С CSS вам придется либо хранить сами таблицы стилей отдельно в файлах и читать их, либо каждый раз копировать все стили из одного проекта и вставлять их в другой. Но это, в принципе, не такая большая проблема. Главное преимущество здесь в том, что через QStyle вы можете нарисовать вообще все что угодно. Например вы можете делать границы абсолютно любой формы.
Я сейчас как раз собираюсь писать стилизацию приложения (на QSS), но мне чертовски мешает фокусный прямоугольник (QStyleOptionFocusRect), который отрисовывается во всех стилях. Жалко что нету методов, которые отключают его. Самые очевидные решения:

1. Написать своего наследника QStyle
2. «Выдрать» сорец стилей из Qt и переписать там пару строчек

Сейчас думаю. Может кто-то подскажет что-нибудь?
Проблема появляется в Linux, а в Windows её нет? Сталкивались с таким, но как избавились от выделения сходу не нашёл. Но вроде бы наследников QStyle не создавали и тем более не меняли исходники Qt.
Отключить можно примерно так:

class StyleProxyTable : public QProxyStyle
{
public:
  void drawPrimitive(PrimitiveElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget = 0) const
  {
    if (element == PE_FrameFocusRect)
    {
     return;
    }
    QProxyStyle::drawPrimitive(element, option, painter, widget);
  }
};


И потом в коде:

myWidget->setStyle(new StyleProxyTable);

Спасибо, я уже решил. Буду писать своего наследника QStyle, так как у приложения должен быть уникальный ненативный стиль.
Кстати, в тему о стилях в Qt. Если в собранном приложение использовать стандартный стиль, то в Windows 8 приложение будет выглядеть в классическом стиле Windows.
Sign up to leave a comment.

Articles