Comments 16
Кстати в тему о QStyle: www.youtube.com/watch?v=2X8R3lZc4EI
А чем CSS не угодил?
setStylesheets
Кстати, СSS в Qt уже умеет рисовать градиенты, тени и прочие прелести?
Я просто оставлю здесь ссылку на свой пост 3.5-летней давности: habrahabr.ru/topic/edit/48963/
Вау, клевый топик.
«Страница не найдена (404-я ошибка)»
«Страница не найдена (404-я ошибка)»
Извиняюсь… Решил немного подправить, раскрасив код (на момент написания тега source еще не было), и дал не тот линк. Вот правильный: habrahabr.ru/post/48963/
Градиент есть. Тени и сглаженные границы реализуются с помощью border-image.
А вот одновременно сделать градиент и какую-нибудь сложную границу скорее всего не получится.
А вот одновременно сделать градиент и какую-нибудь сложную границу скорее всего не получится.
border-image — тоже хорошо. Но после «всплытия» CSS3 мне стало лень возиться с картинками. Когда работаю над веб-интерфейсами, всегда стараюсь их количество сводить к минимуму. Но это не такая уж большая проблема, на самом деле — просто личная прихоть. Да и надо будет попробовать в качестве параметра border-image передать qlineargradient, интересно, будет ли работать…
У CSS по сравнению с этим подходом есть два недостатка. Во-первых, если вы делайте стиль через QStyle, то для того, чтобы использовать его повторно вам нужно скопировать два файла и написать одну строчку кода. С CSS вам придется либо хранить сами таблицы стилей отдельно в файлах и читать их, либо каждый раз копировать все стили из одного проекта и вставлять их в другой. Но это, в принципе, не такая большая проблема. Главное преимущество здесь в том, что через QStyle вы можете нарисовать вообще все что угодно. Например вы можете делать границы абсолютно любой формы.
Я сейчас как раз собираюсь писать стилизацию приложения (на QSS), но мне чертовски мешает фокусный прямоугольник (QStyleOptionFocusRect), который отрисовывается во всех стилях. Жалко что нету методов, которые отключают его. Самые очевидные решения:
1. Написать своего наследника QStyle
2. «Выдрать» сорец стилей из Qt и переписать там пару строчек
Сейчас думаю. Может кто-то подскажет что-нибудь?
1. Написать своего наследника QStyle
2. «Выдрать» сорец стилей из Qt и переписать там пару строчек
Сейчас думаю. Может кто-то подскажет что-нибудь?
Попробуйте использовать QProxyStyle.
Проблема появляется в 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);
Кстати, в тему о стилях в Qt. Если в собранном приложение использовать стандартный стиль, то в Windows 8 приложение будет выглядеть в классическом стиле Windows.
Sign up to leave a comment.
Создаем стиль интерфейса Qt на примере таблицы