Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Как правильно организовать программу


Автор: deniska 23.10.2014, 11:52
Здравствуйте. Есть приложение, написанное на VC++. Интерфейс его уже сейчас нестандартный, + поддерживается 2 языка (пока).
Программу нужно дорабатывать (много новых окон с большим количеством элементов в них) и еще хотелось бы иметь возможность на будущее всяких штук типа анимаций при переходе от окна к окну, анимированное перемещение элементов в окнах.
Люди советовали WPF попробовать, но мне хочется все-таки сначала попробовать Qt+Qml, поскольку если звезды сойдутся, то получится соскочить с винды.

итак, сейчас приложение представляет из себя что-такое: 
1. есть несколько рабочих потоков, работающих с разнотипными устройствами. 
2. В потоке GUI есть окно-подложка, которое виднО всегда (на нем всякие индикаторы общего состояния системы). при старте программы имеем поверх подложки некое меню, а далее в зависимости от действия пользователя появляются другие окна, а предыдущие закрываются.
3.1 В этих окнах отображаются данные, получаемые из рабочих потоков(меняются иконки на кнопках, текст в полях ввода, статический текст)
3.2 также в этих окнах задаются параметры, передаваемые в рабочие потоки (эти параметры должны задаваться в разрешенном диапазоне с заранее известным шагом изменения)
4. в окне из п.2 реализован обычный оконный таймер, в обработчике которого забираются данные из рабочих потоков. Остальные окна уведомляются о том что данные получены и им пора бы обновить состояние своих элементов.

ну а теперь собственно вопросы по этим пунктам:
1. рабочие потоки организуем через QThread. 
2. организуем С++ класс модели данных, который будет читать данные из потоков и уведомлять текущие окна об обновлении (если оно необходимо).
3.1 Кажется это нужно реализовывать как-то согласно http://qt-project.org/doc/qt-5/qtqml-cppintegration-exposecppattributes.html. Кто должен отвечать, за то, какое qml окно должно появится вместо предыдущего в результате действий пользователя? С++ Модель или Qml-ный вид? 
3.2 как задать элементам QML диапазон и шаг изменения величины? В текущем проекте я делал на каждую такую переменную структуру, в которой в полях все эти параметры описывал. Тут также?(регистрировать тип данных и передавать в qml? как?)
4. в С++ классе модели данных напрашивается QTimer?
 
В догонку вопросик: почему-то QML-Designer не отображает всевозможные поля для редактирования выделенного элемента (ну например, цвет заливки окна или цвет текста кнопки) и приходится в текстовом режиме руками эти вещи вписывать, поскольку при добавлении элемента в окно эти параметры не прописываются. Это у всех так или у меня что-то не так настроено? Если у всех, то в чем сокральный смысл, не давать пользователю менять максимальное количество параметров мышкой? плюс без доков и не знаешь, можно ли вообще менять те или иные параметры...

ПС:
Qt 5.3.2 QtCreator 3.2.1 QML 2.3(наверное, не очень разобрался в различиях, но этот вроде последний пока)
Извиняюсь за "многа букав". 
Спасибо.

Автор: bsa 12.11.2014, 17:15
Вообще-то, ты можешь создать у каждого потока свои сигналы, а окошки привязать к ним. В итоге содержимое окошек будет меняться сразу после изменения данных в потоке. Если же у тебя данные меняются очень часто (чаще 60 раз в секунду), то тогда единственный выход - опрос по таймеру. В качестве таймера не обязательно использовать QTimer. Можно воспользоваться и QWidget::setTimer/killTimer/timerEvent.

Автор: deniska 20.11.2014, 18:15
Спасибо за совет.
Столкнулся вот с какой проблемой.
Небольшой тест соорудил с Qt5.3.2 VS2013 и все это время пытался провернуть deploy на
целевой комп WinXP с довольно старой встроенной видюхой, видимо OpenGL2.0 не поддерживает.
angle версия Qt не подходит под XP, перешел на OpenGL...

в общем не работает пример на целевом компе... 
 консоль программы выдает ошибки по функциям gl*. почитал, что вроде как проблема с OpenGL, более новых дров для видяхи этой нет (Mobile Intel 945 chipset family).

тупик?

ПС
вообще ощущения после месяца неспешных потуг, проб Qt+Qml, такие:

Creator не стабилен, несколько раз падал. На более ранних версиях не замечал такого, может потому что использовал раньше для проекта QWidgets в основном VS редактор
deploy - целая песня. совет 1 - скопировать в отдельную папку всевозможные зависимости, а потом удалять лишнее. после удаления каждого модуля - запускать программу
то что есть разные варианты (angle opengl) лично я узнал только когда уперся в ограничения с XP
опять же про специальные ключи для сборки под ХР тоже явно не указано. 
в общем както стремно начинать довольно большой проект на Qt после такого... 




Автор: Amp 21.11.2014, 14:28
В последнее время у меня складывается ощущение, что эта технология в основном ориентирована на мобильный мир. Я не видел серьезных десктопных приложений на QML. Более того, я вообще кроме демок не видел приложений на QML, разве что KDE (но это немного из другой оперы). Хотя судя по мейллистам, люди что-то где-то пишут на нем smile Я все ждал, вдруг кто поделится своим опытом в этой теме. 

945GM поддерживает только OpenGL 1.4, поэтому получить ускорение в случае с QtQuick можно будет только через Angle.

Хочешь зрелую и обкатанную технологию для нестандартных интерфейсов - бери WPF.

Автор: deniska 21.11.2014, 14:39
Amp,  вот я вчера этот пост написал, посидел, подумал... действительно похоже что придется пощупать WPF...

Цитата

945GM поддерживает только OpenGL 1.4, поэтому получить ускорение в случае с QtQuick можно будет только через Angle.

а Angle не работает под WinXp, правильно? выходит замкнутый круг в случае моих исходных данных.

просто в случае с Qt хотел оставить себе возможность "мигрировать" с винды в будущем.

спасибо!

Автор: Amp 23.11.2014, 20:53
Цитата(deniska @  21.11.2014,  14:39 Найти цитируемый пост)
а Angle не работает под WinXp, правильно? выходит замкнутый круг в случае моих исходных данных.

Да, судя по всему забили они на поддержку Windows XP.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)