Название: Стиль как в KDE Отправлено: loewa от Декабря 27, 2005, 14:29 Кто нибудь хнает как сделать приложению стиль как у KDE, цвет и.т.д не используя KDE (KStyle....)
Название: Как KDE Отправлено: rm от Декабря 27, 2005, 21:13 переписать часть KDE
Название: Как KDE Отправлено: Sergey B. от Декабря 28, 2005, 08:02 Цитата: "rm" переписать часть KDE Ну зачем же так... Надо написать свой стиль... Qt, рисует виджеты сама, поэтому можно всё... Надо только перехватить отрисовку и написать по своему... Есть мысль, но нет времени.. Хочу Mac os X brushed забабахать... Можно объеденить усилия и стартануть... Название: Как KDE Отправлено: Steven_Orko от Декабря 28, 2005, 12:55 to Sergey B.
Поделишься когда получится? :) Название: Как KDE Отправлено: Sergey B. от Декабря 28, 2005, 21:39 Цитата: "Steven_Orko" to Sergey B. Поделишься когда получится? :) OK... добавлено спустя 5 часов 4 минуты: Во нашёл... http://qt.osdn.org.ua/look-qa.html Наше приложение поддерживает платформы Windows, Linux, Solaris и Mac OS X, и при этом использует стили, свойственные каждой из этих систем. Однако мы хотели бы немного изменить внешний вид виджета QTabWidget и сделать его одинаковым на всех платформах. Как это можно сделать без наследования от всех стандартных классов стилей (QWindowsStyle, QMotifStyle и т.д.) ? Это зависит от того, что именно вы хотите изменить. Одним из предложенных Qt-разработчиками решений является использование класса ProxyStyle, унаследованного непосредственно от Style и перенаправляющего вызовы виртуальных функций на соответствующие вызовы стандартных классов стилей: class ProxyStyle : public QStyle { public: ProxyStyle(const QString &baseStyle) { style = QStyleFactory::create(baseStyle); } void polish(QWidget *w) { style->polish(w); } void unPolish(QWidget *w) { style->unPolish(w); } int pixelMetric(PixelMetric metric, QWidget *widget) const { return style->pixelMetric(metric, widget); } ... private: QStyle *style; }; Затем достаточно наследовать ProxyStyle и реализовать класс с желаемым поведением: class MyStyle : public ProxyStyle { public: MyStyle(const QString &baseStyle); int pixelMetric(PixelMetric metric, const QWidget *widget) const; }; int MyStyle::pixelMetric(PixelMetric metric, const QWidget *widget) const { if (metric == PM_SplitterWidth) return 6; return ProxyStyle::pixelMetric(metric, widget); } Впоследствии этот класс используется следующим образом: int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setStyle(new MyStyle(app.style().name())); ... return app.exec(); } Благодаря прокси-технике, необходимое поведение реализуется лишь в одном классе MyStyle. Далее объект этого класса используется вместо стандартных стилей, и все нереализованные в MyStyle методы подменяются соответствующими методами из стандартных стилей. Styles Таким образом, прокси-техника в некоторой степени компенсирует ограничения языка: в C++ можно наследовать только от классов, а не от объектов. Подробнее прокси-классы рассмотрены в Design Patterns (ISBN 0-201-63361-2). При использовании прокси-классов нужно помнить об одной тонкости. Некоторые виртуальные функции стандартных стилей Qt реализованы посредством других виртуальных функций, например, метод QWindowsStyle::drawComplexControl() для отрисовки стрелочек виджета QComboBox вызывает метод QWindowsStyle::drawPrimitive(). Если в классе MyStyle (который унаследован от ProxyStyle) вы переопределите метод drawPrimitive(), то он будет проигнорирован в классе QWindowsStyle, так как последний будет использовать свою функцию drawPrimitive(). (Это объясняется тем, что MyStyle не наследует QWindowsStyle, а лишь включает его.) В зависимости от того, какой именно виджет вы захотите изменить, вам также может понадобиться переопределить метод drawComplexControl(). Название: Как KDE Отправлено: rm от Декабря 28, 2005, 22:59 Цитата: "Sergey B." Цитата: "rm" переписать часть KDE Ну зачем же так... Надо написать свой стиль... Qt, рисует виджеты сама, поэтому можно всё... Надо только перехватить отрисовку и написать по своему... Есть мысль, но нет времени.. Хочу Mac os X brushed забабахать... Можно объеденить усилия и стартануть... я так понял еще надо и настройки KDE брать, тогда часть функций kdecore и kdeui надо переписать а просто новую тему виджетов сделать - ясно, что проблем нет :D Название: Как KDE Отправлено: Sergey B. от Декабря 29, 2005, 01:40 Цитата: "rm" Цитата: "Sergey B." Цитата: "rm" переписать часть KDE Ну зачем же так... Надо написать свой стиль... Qt, рисует виджеты сама, поэтому можно всё... Надо только перехватить отрисовку и написать по своему... Есть мысль, но нет времени.. Хочу Mac os X brushed забабахать... Можно объеденить усилия и стартануть... я так понял еще надо и настройки KDE брать, тогда часть функций kdecore и kdeui надо переписать а просто новую тему виджетов сделать - ясно, что проблем нет :D А как же виндовс... Надо чиста по пацански... только средствами qt Название: Как KDE Отправлено: rm от Декабря 29, 2005, 08:54 Sergey B.
Ну так виджет стайлы к KDE не сильно относятся. |