420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
1 | |
WxWidgets - кто пользуется03.07.2015, 18:38. Показов 5631. Ответов 18
Метки нет (Все метки)
Гуру WxWidgets, дайте советы...
Я пришел из Делфи, поэтому для меня этот кошмар довольно новый... Нужно в С++ делать оконные программы. Остановился на wxWidgets+CodeBlocks+MinGW. А теперь собственно вопросы: 1) После Делфи бесит скупость редактора окошек. Это я что-то забыл установить или это норма? Например как делается простое "приклеивание к бортикам" компонента или растягивание панели вдоль нижней границы? Или растягивание редактора на всю оставшуюся часть? Перетасквать компоненты можно только по одному, копирование-вставка компонент не работает. Может есть альтернативные редакторы? (в делфи базовый дизайн из десятков компонент делался минут за 10, а тут 3 кнопки таскаю по экрану уже час) 2) Есть ли ВСТРОЕННЫЙ редактор RichEdit? Куда можно скопировать-вставить цветной текст из ворда. Куда можно выводить цветные строки разными шрифтами? Или вообще сделать полноценный редактор RTF файлов? В Делфи был компонент TRichEdit похоже созданный на основе WinAPI 3) Если (когда) я захочу перейти под MacOS/Linux, что мне предстоит переделывать? Слышал что обязательно прийдется немножко "перепиливать". Учитывая что мне не нужен полный функционал окошек (5-8 ВИДОВ компонент), хотелось бы предусмотреть это и максимально уменьшить переделку потом. 4) Тяжело ли написать свой оконный компонент? Есть ли сборники опенсорс компонент? Тяжело ли их подключить? Насколько они мультиплатформенные? Не по теме: Говорят Qt удобнее, но ОЧЕНЬ не хочется. И еще мне ОЧЕНЬ нужна КОНСОЛЬНАЯ сборка проекта. Под wxWidgets я смог это настроить (долго мучился). А еще слышал что сборка под Qt намного дольше wxWidgets и занимает под 40Мб. Нужно написать простой набор редакторов полей к моей-же библиотеке написанной под Codeblocs+MinGW.
0
|
03.07.2015, 18:38 | |
Ответы с готовыми решениями:
18
wxWidgets SetBitmap WxWidgets комппиляция Изображения в wxWidgets WinAPI vs wxWidgets |
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
|
|
03.07.2015, 19:30 | 2 |
Попробую ответить на часть вопросов, правда wxWidgets знаю плохо, в любом случае вам придется самому разбираться в документации.Скажу одно, практически все, что есть в WinAPI есть в wxWidgets, ну собственно и ближайшие аналоги виджетов для линукса точно - для остальных платформ не в курсе.
Всем этим занимаются классы wxSizer и их потомки - они достаточно мощные, можно настроить так как вам удобно, включая границы отступы и реакции на растягивания, туториалы есть в рунете. В CodeBlocks есть только встроенный редактор wxSmith. wxRichTextCtrl - при добавлении виджета, присутствуют все дефолтные операции, нужное\ненужное необходимо переопределять в своем коде. С этим проблем нет - наследуетесь от любого нужного вам виджета и добавляете то что вам нужно. Большинство нужных функций виртуальные можно переопределить, а также их обработчики событий. P.S советую посмотреть семплы там же имеются сорцы - думаю множество вопросов отпадут, ну и в любом случае придется изучать их скудную документацию.
1
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
04.07.2015, 08:53 [ТС] | 3 |
Пробовал... Может я что-то напутал, но я не смог туда вставить через Ctrl+V, Shift+Ins и даже через меню, текст скопированный в TRichEdit. Я думал это стандартная операция на уровне WinAPI и ее нужно разве что специально "перекрывать". Обычный текст - вставляется из буфера...
А есть те кто этим пользуется профессионально? Накачал кучу примеров бинарников написаных на wxWidgets... Почти шедевры! (почти как на Делфи) Шустрые, компактные, со сложными графическими компонентами (редактор аудио-файлов рисует графики - анимация очень быстрая). То что видел на Qt после этого кажется огромным и тормознутым... Хотя может и редакторы удобнее у Qt. А на чем пишет большинство??? Для КОММЕРЧЕСКИХ продуктов? (может я изначально не правильный инструмент выбираю) Добавлено через 36 минут Не понял, это не графические классы? Начал гуглить и сплошные команды - "как подключить сайзер" Тоесть до компиляции и запуска я не увижу результат того как "растянул/прижал" сайзер мой компонент?
0
|
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
|
|
04.07.2015, 09:24 | 4 |
Нет, это не класс виджетов - такая штука идет к каждому окну, и нужно знать как они работают в этом случае меньше возни с постоянной перекомпиляцией.
Риторический вопрос CodeBlocks написан полностью на нем, есть еще Audacity - звуковой редактор.Редактор уровней для движка Unreal Engine. Все же большинство программистов пишут на нем, в отличие от виджетов QT рисует все сам. Если вам нужно что-то быстро написать лучше остановить свой выбор на QT - у них больше комьюнити и лучше справка.
1
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
04.07.2015, 09:48 | 5 |
Дисклеймер: я ни codeblocks, ни wxWidgets в жизни не видел, поставил только несколько минут назад.
В редакторе wxSmith есть вкладка Layout с различными сайзерами. Можно таскать мышкой на форму и комбинировать как нравится. Результат, отображаемый в редакторе, отличается от фактического хотя бы потому, что в моем случае редактор, например, не учитывает высоту и ширину родительского wxDialog и отображает все более компактно. Еще в официальной вики есть туториал: Building more complex window.
1
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
04.07.2015, 10:16 [ТС] | 6 |
Я имел в виду кто-нибудь ИЗ ВАС на WxWidgets пишет профессионально?
То что этим пользуется Unreal это конечно круто, но там много кодеров, а я один! И если мне нужно "набросать" простую утилиту-калькулятор или простой редактор полей базы, то не хочу возвращаться в Делфи(платный и умирающий с каждым выходом нового релиза, не смотря на все свои достоинства)... Не по теме: Например надо было в трей запихнуть автоматический проверяльщик сайта (скачать zip/отправить zip) - 5-6 кнопок, мемо и 2-3 едитора для настроек. Работы на 5-6 часов. Графический дизайн сделал за 5 минут - остальное писал функционал кнопок. Мне часто приходится писать такие "утилитки". Желательно маленького размера, а не в 40-50мб. И шустрые. Поэтому пока и не смотрю на Qt. Понятно что "чуть-чуть" будут отличаться, но раньше привык просто выставлять у кнопки "прижать влево" и она отодвигала остальные кнопки... И это-же задавало кнопке автоматическую высоту... Теперь похоже все это делается ТОЛЬКО через код... Неприятно... Надо привыкнуть...
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
04.07.2015, 10:20 | 7 |
Мне сложно воспринимать художественный пересказ gui-лейаута. Можно пример картинкой? Хоть в пеинте. Я же выше написал, что лейауты в графическом редакторе есть. Может быть, я просто не понял какого результата хочется получить?
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
04.07.2015, 10:56 [ТС] | 8 |
Тяжело это сделать статическими картинками. Там в каждом элементе (кнопке, панели, мемо,..) было поле (Align) в списке графических параметров отвечающее за позицию каждого элемента. Поменяв слева направо я менял позицию элемента без перетягивания его в другой "квадрат" сайзера. А еще сайзер должен ложиться на пустую форму. И если хочу поменять вид сайзера для другой растановки обьектов, должен ее сначала очистить (или искать полу-хакерские плоходокументированные не логичные/нативные методы для подмены)
верний абзац с картинкой: http://thedelphi.ru/les/les8.php или это как получить? http://www.webdelphi.ru/wp-con... tRight.jpg Я попробовал добавить 2 батона в горизонтальный сайзер. Получил равномерное растягивание двух тонких кнопок 50%(это управляется? могу поставить 60/40? в настройках нет.) от ширины. Но высота осталась те-же 30 пикселов! Раньше я бы получил растягивание кнопок и в верх в высоту. Теперь на высокой форме получил две тонюсенькие кнопки в центре. Добавлено через 10 минут Обидно другое! Еще студентом (лет 10 назад) я на Делфи нарисовал механизм управления компонентами формы поудобнее. Да и готовые чужие наработки под Делфи были в опенсорсе - там можно выделить несколько элементов и их плавно двигать. И кнопками управлять можно. А тут стрелки - вообще "глухие" на выделеном компоненте... Такое чувство что довели до состояния "заработало хоть как-то, в принципе работать можно, ну и ладушки... потом как-нибудь может быть доведем до ума".
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
04.07.2015, 11:00 | 9 |
1
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
04.07.2015, 11:11 [ТС] | 10 |
А все-таки, то что большинство пользуются Qt это я уже понял, а "меньшенство"? РЕАЛЬНО кто-нибудь ИЗ ВАС использует wxWidgets в повседневной работе?
Может я зря затеял эту возню с wxWidgets?
0
|
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
|
|
04.07.2015, 11:23 | 11 |
В виджетах сам сайзер берет полностью полость окна родителя. То есть у каждого окна есть метод SetSizer(wxSizer*) - к этому сайзеру можно применить еще сайзер к дочернему еще один и т.д, в настройках сайзера можно указать оффсет до формы - причем этот оффсет может быть растягивающимся либо нет, Align также присутствует -лево\право\центр и т.д - плюс к этому можно задать будет ли растягиваться форма.Про wxSmith не в курсе, возможно ли это сделать средствами этого плагина, но кодом это реализовать можно точно (по второй картинке).Пропорциональность также задается в сайзерах.
Добавлено через 2 минуты Вы хотите получить результат сразу как в Дельфи, тут такого не получится,чтобы получить нужный результат все нужно делать руками, сомневаюсь что wxSmith может выдать сложный лейаут.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
04.07.2015, 11:27 | 12 |
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
04.07.2015, 11:32 | 13 |
Не знаю, насколько это соответствует ожиданиям, но просто потыкав wsSmith получил такой результат.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
04.07.2015, 12:23 [ТС] | 14 |
Меня убивает то что если если я положил на окно родитель не тот сайзер, то все! Стирай и начинай с начала... В делфи у меня был проект в котором было больше 400 кнопок на одной форме. Прятал в закладки, выносил на главное окно, растягивал одну из важных в данный момент кнопок вдоль всего низа или верха "окна-родителя". Копировал и вставлял дубли десятками (все настройки выделенного уже устраивает - надо лишь другие обработчики на кнопки назначить)
Я уже поигрался с рабочей областью, накидал компонент, уже даже приписал к некоторым код (хелло ворд, но все-таки). А теперь надо положить на основу сайзер... Похоже ВСЕ переписывать надо! Причем даже не могу сделать форму-клон и скопировать оттуда нужное! Вроде элементарные вещи, я сам такое на Делфи писал за неделю-две! почему-же сишникам это не нужно??? Я понимаю что перейдя на С++ я должен и думать научиться "по другому", но пока мне это не понятно! неделя-две работы для профи и редактор станет крайне удобным... А как дело обстоит в Qt? Или в MSВижуалС++?
0
|
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
|
|
04.07.2015, 13:29 | 15 |
Вы думаете wxWidgets это не умеет ? Умеет, в том числе изменять все это динамически. Скиньте сюда или ко мне в личку ваш exe-шник - попробую скопировать со всеми растяжениями и отступами.
Тоже самое, возможно с большим функционалом. Имхо - это не повод забивать на инструментарий, не разобравшись в нем.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
04.07.2015, 13:35 | 16 |
Насколько я понимаю, у автора претензии не к библиотеке, а к визуальному редактору. В частности, касательно невозможности изменения типа сайзера средствами wxSmith. Естественно, на уровне кода это делается без проблем.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.07.2015, 14:03 | 17 |
очень и очень плохо.
работая с mfc, я выработал привычку постоянно и часто бэкапиться. одно неверное движение - и начинается длительный головняк: ручное исправление ресурсов. среда здесь уже не помогает. мне не удалось скопировать ресурсы из одного проекта в другой (если проекты из разных солюшенов). поэтому, если хочется построить диалог "вот как вот в этой программе", но в другом проекте, то даже при наличии исходников, и всех ресурсов, выполнить это затруднительно. ресурсы у них дибильные, требующие специализированного компилятора. class wizard, который по идее должен автоматизировать головняк с ресурсами, в visual studio 2013 плюется исключениями. (не может обнаружить нужный для работы базовый класс у класса юзерского диалога, несмотря на то, что физически он есть. и саму иерархию конструировал мастер проекта, а не программист) я пытался завести его на разных студиях. нигде не работает. поэтому, карту реакций на события приходится править вручную. mfc не умеет автоматический ресайз виджетов. это означает, что при растягивании диалога, не будут растягиваться вместе с ним. и если хочется, что бы оно красиво все тянулось, то нужно вручную писать много кода для каждого отдельного случая. кроме того, mfc вообще не умеет наделять виджеты looknfeel`лами. это означает, что виджеты не обладают поведением. (нельзя без программирования настраивать поведение) все что они могут - это статически сидеть на форме, и реагировать на события. код реакции нужно каждый раз прописывать вручную. mfc не инкапсулирует работу с системой. и не избавит вас от необходимости иметь навыки работы с winapi это означает, что для работы вам придется понимать принципы взаимодействия системы с приложением. --------------------------------------------------------------------------------------------------------------------- резюмируя: если нужно по-быстрому запилить какой нибудь не сильно сложный диалог - вполне годное. при некоторой сноровке простенькие диалоги можно очень быстро формошлепить. зависимость только от системных библиотек самой винды, а значит, с ними не приходится геммороиться, что радует. но об удобствах цивилизации (дельфин, кутешечка) можно забыть. и если есть возможность работать с чем то другим, то лучше рассмотреть альтернативы, потому что хуже, чем mfc представить себе сложно. (если только голый winapi).
2
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
04.07.2015, 14:20 [ТС] | 18 |
угу! Если бы я хотел заниматься дизайном окошек на уровне кода, я бы в вин-апи залез - там возможности на порядок гибче чем в любом мультиОС...
Мне не нужен сложный дизайн (анимации, хитрые компоненты, сложные списки)! Предстоит нарисовать несколько своих ОЧЕНЬ сложных компонент(графики с зумом и вращением + особый текстовый редактор цветных строк - каждая строка рисуется и красится своей формулой)! Вокруг которых будет много простых кнопочек, едиторов и галочек. Кнопки нужны в основном для отладки моего компонента и для удобства во время будут часто переноситься. В коде это писать не хочется - хочется "схватил и поставил там где удобнее", если надо с мини размера развернул на пол экрана... Не по теме: Когда писал на Делфи подобное (хочу портировать) тест каждой функции посадил на кнопку со счетчиком(текст-количество успешных тестов), галочкой(исключить из массовых автотестов) и панелькой-лампочкой (цветом состояние). Мог копировать и вставлять куда хочу. Мог поменять размер любой кнопки для удобного нажатия мышкой. Мог переносить кнопки между закладками (копи-пасте между "разделами" тестов). В wxWidgets ничего этого не нашел!!!! Количество таких элементов зашкаливало за 300-400 на форму (полное количество обьектов 464 - специально подсчитал). Для текущих отлаживаемых команд я менял шрифт и цвет текста. Делалось это почти в один клик на параметрах формы. Через текст я это буду очень долго писать и держать весь дизайн в голове и тексте, а не перед глазами (когда в голове должны быть только формулы)! Я понимаю что через код можно менять ВСЕ! Но... зачем тогда визуальный редактор??? p.s. я так и не нашел аналог Splitter в визуальных компонентах - хотя что-то в примерах кода встречал...
0
|
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
|
|
04.07.2015, 14:31 | 19 |
Попробуйте тогда посмотреть wxFormBuilder, но там похоже надо копи-пастить сгенерированный код в проект кодблокса.
2
|
04.07.2015, 14:31 | |
04.07.2015, 14:31 | |
Помогаю со студенческими работами здесь
19
Mingw и wxWidgets Имитация действий в wxWidgets WxWidgets wxPuts ошибка WxWidgets - в консольном приложении Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |