Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: warlock от Января 17, 2010, 14:15



Название: Единый интерфейс программы на разных платформах
Отправлено: warlock от Января 17, 2010, 14:15
Как реализовать одинаковое отображение программы на разных платформах? Например софт для KDE имеет всегда специфический интерфейс, запускаешь ли ты его под сам же KDE, так и под  GNOME.
Знаю что при запуске программы в консоли можно указать внешнее оформление, но как сделать запуск программы всегда с конкретным оформелением?
В чем преимущества и недостатки?


Название: Re: Единый интерфейс программы на разных платформах
Отправлено: BRE от Января 17, 2010, 14:23
Посмотри на:
класс QStyle и его производные;
void QApplication::setStyle ( QStyle * style )   [static]


Название: Re: Единый интерфейс программы на разных платформах
Отправлено: Marat(Qt) от Января 17, 2010, 15:18
Преимущество в том, что программа везде будет одинаково выглядеть, недостаток в том, что программа везде будет смотреться как не родная.


Название: Re: Единый интерфейс программы на разных платформах
Отправлено: warlock от Января 17, 2010, 16:40
Спасибо большое.  :)
Сделал так:
app.setStyle(new QCleanlooksStyle);
где app - естественно объект класса QApplication.
При запуске программы поменялись внутренние компоненты (кнопки, чекбосы и т.д.), но внешние элементы (заголовок окна, кнопки закрытия, сворачивания, разворачивания), остались прежними. Даже при запуске с командной строки с параментром -style тот же эффект. Я делаю вывод что это не на программном уровне проблема, так или я ошибаюсь?

И еще, не подскажите есть ли в документации список возможных стилей оформеления? А то я лазив по списку классов нашел QMotifStyle,QWindowsStyle,QMacStyle(не заработал),QCleanlooksStyle ну и т.д. Есть ли просто список стилей? О, и да, какое название стиля, что используеться в KDE 4.5?


Название: Re: Единый интерфейс программы на разных пла&
Отправлено: Marat(Qt) от Января 17, 2010, 16:57
Во-первых, KDE 4.5 пока еще нету. Скоро выйдет 4.4. Стили КДЕ, МАК, ВинXP и висты не являются кроссплатформенными. Кроме них есть стили QMotifStyle, QWindowsStyle, QCDEStyle, QCleanlooksStyle, QPlastiqueStyle - кроссплатформенные.
Декорации окон(заголовок и проч.) стилями не контролируются, но можно создать свои. С этим сложнее.

У Макса Шлее есть кое-что интересное, в книге по Qt4.5 страница 352 "Создание нестандартного окна виджета" (Глава 19 Растровые изображения). Не совсем по теме, но близко.


Название: Re: Единый интерфейс программы на разных платформах
Отправлено: warlock от Января 17, 2010, 17:50
Сори, перепутал верисию KDE с Qt, читал доки по нем.
Для использования кроссплатформенных стилей нужно, как я понимаю, ставить их библиотеки?
Сейчас использую GNOME, как проверить как будет выглядеть окно в KDE, дело в том , что не раз у меня так выходило, что совсем чуть-чуть, но выглядело не так как задумано. Ну или вообще, как писать для KDE?

Про пользовательские декорации видел, если кто будет читать эту тему будет интересно, то вот - Simple Decoration Example (http://doc.trolltech.com/4.6/qws-simpledecoration.html).
По поводу "Создание нестандартного окна виджета" посмотрел, классная штука, это получаеться можно использовать маски для внешнего вида окна? Т.е. это я могу нарисовать в GIMP'е например фон, а на нем разместить мои виджеты, элементы управления, кнопки? Только наверно тогда нельзя будет изменять размер окна, но не всегда это необходимо  :)


Название: Re: Единый интерфейс программы на разных платформах
Отправлено: Marat(Qt) от Января 17, 2010, 18:09
Для использования кросс-стилей, мною перечисленных, надо просто их задать, как вы это делали. Стили везде будут одинаковы, хотя мелкие отличия будут(как правило это связано со шрифтами, я например постоянно кросскомпилирую свои программы и запускаю их под вайном, чтобы было удобно и под линуксом и в вайне запускаю в одном стиле, как правило cleanlooks, все очень похоже, но вот шрифты подводят).

Думаю на счет вашего писания для КДЕ чуть сложнее. Как вариант у одного знакомого видел тему для гнома - один в один похожую на кде4. Можно весь гном на него пересадить. С другой стороны можете сделать свой стиль при помощи css (в Qt это qss, по сути тот же синтаксис). Каким вы его сделаете - ваше дело, но можете попробовать сделать что-то очень похожее на kde.
Цитировать
Т.е. это я могу нарисовать в GIMP'е например фон, а на нем разместить мои виджеты, элементы управления, кнопки?
Да
Цитировать
Только наверно тогда нельзя будет изменять размер окна
Там было описано как, обрабатывая события мыши - двигать окно, по тому же принципу можно реализовать изменение его размера.