Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
1

WxWidgets - кто пользуется

03.07.2015, 18:38. Показов 5631. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Гуру 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2015, 18:38
Ответы с готовыми решениями:

wxWidgets SetBitmap
Доброе утро, с не давнего времени изучаю C++, до этого изучал C#. Возникла потребность в...

WxWidgets комппиляция
При компиляции обычной проги все нормально но при попытки скомпилировать простую прогу с такой...

Изображения в wxWidgets
Необходимо создать wxBitmapButton и установить ей картинку из файла относительно местоположения к...

WinAPI vs wxWidgets
Хочу перевести свое консольное приложение в нормальный вид. Опыта написания приложений виндовс...

18
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
03.07.2015, 19:30 2
Попробую ответить на часть вопросов, правда wxWidgets знаю плохо, в любом случае вам придется самому разбираться в документации.Скажу одно, практически все, что есть в WinAPI есть в wxWidgets, ну собственно и ближайшие аналоги виджетов для линукса точно - для остальных платформ не в курсе.
Цитата Сообщение от Tester64 Посмотреть сообщение
Например как делается простое "приклеивание к бортикам" компонента или растягивание панели вдоль нижней границы? Или растягивание редактора на всю оставшуюся часть?
Всем этим занимаются классы wxSizer и их потомки - они достаточно мощные, можно настроить так как вам удобно, включая границы отступы и реакции на растягивания, туториалы есть в рунете.
Цитата Сообщение от Tester64 Посмотреть сообщение
Может есть альтернативные редакторы?
В CodeBlocks есть только встроенный редактор wxSmith.
Цитата Сообщение от Tester64 Посмотреть сообщение
Есть ли ВСТРОЕННЫЙ редактор RichEdit?
wxRichTextCtrl - при добавлении виджета, присутствуют все дефолтные операции, нужное\ненужное необходимо переопределять в своем коде.
Цитата Сообщение от Tester64 Посмотреть сообщение
4) Тяжело ли написать свой оконный компонент?
С этим проблем нет - наследуетесь от любого нужного вам виджета и добавляете то что вам нужно. Большинство нужных функций виртуальные можно переопределить, а также их обработчики событий.
P.S советую посмотреть семплы там же имеются сорцы - думаю множество вопросов отпадут, ну и в любом случае придется изучать их скудную документацию.
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.07.2015, 08:53  [ТС] 3
Цитата Сообщение от smartpointer Посмотреть сообщение
wxRichTextCtrl - при добавлении виджета, присутствуют все дефолтные операции, нужное\ненужное необходимо переопределять в своем коде.
Пробовал... Может я что-то напутал, но я не смог туда вставить через Ctrl+V, Shift+Ins и даже через меню, текст скопированный в TRichEdit. Я думал это стандартная операция на уровне WinAPI и ее нужно разве что специально "перекрывать". Обычный текст - вставляется из буфера...

Цитата Сообщение от smartpointer Посмотреть сообщение
правда wxWidgets знаю плохо
А есть те кто этим пользуется профессионально?
Накачал кучу примеров бинарников написаных на wxWidgets... Почти шедевры! (почти как на Делфи) Шустрые, компактные, со сложными графическими компонентами (редактор аудио-файлов рисует графики - анимация очень быстрая). То что видел на Qt после этого кажется огромным и тормознутым... Хотя может и редакторы удобнее у Qt.
А на чем пишет большинство??? Для КОММЕРЧЕСКИХ продуктов?
(может я изначально не правильный инструмент выбираю)

Добавлено через 36 минут
Цитата Сообщение от smartpointer Посмотреть сообщение
Всем этим занимаются классы wxSizer и их потомки
Не понял, это не графические классы?
Начал гуглить и сплошные команды - "как подключить сайзер"
Тоесть до компиляции и запуска я не увижу результат того как "растянул/прижал" сайзер мой компонент?
0
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
04.07.2015, 09:24 4
Цитата Сообщение от Tester64 Посмотреть сообщение
Не понял, это не графические классы?
Нет, это не класс виджетов - такая штука идет к каждому окну, и нужно знать как они работают в этом случае меньше возни с постоянной перекомпиляцией.
Цитата Сообщение от Tester64 Посмотреть сообщение
А есть те кто этим пользуется профессионально?
Риторический вопрос CodeBlocks написан полностью на нем, есть еще Audacity - звуковой редактор.Редактор уровней для движка Unreal Engine.
Цитата Сообщение от Tester64 Посмотреть сообщение
То что видел на Qt после этого кажется огромным и тормознутым...
Все же большинство программистов пишут на нем, в отличие от виджетов QT рисует все сам. Если вам нужно что-то быстро написать лучше остановить свой выбор на QT - у них больше комьюнити и лучше справка.
1
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.07.2015, 09:48 5
Цитата Сообщение от Tester64 Посмотреть сообщение
Не понял, это не графические классы?
Начал гуглить и сплошные команды - "как подключить сайзер"
Тоесть до компиляции и запуска я не увижу результат того как "растянул/прижал" сайзер мой компонент?
Дисклеймер: я ни codeblocks, ни wxWidgets в жизни не видел, поставил только несколько минут назад.

В редакторе wxSmith есть вкладка Layout с различными сайзерами. Можно таскать мышкой на форму и комбинировать как нравится. Результат, отображаемый в редакторе, отличается от фактического хотя бы потому, что в моем случае редактор, например, не учитывает высоту и ширину родительского wxDialog и отображает все более компактно.

Еще в официальной вики есть туториал: Building more complex window.
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.07.2015, 10:16  [ТС] 6
Цитата Сообщение от smartpointer Посмотреть сообщение
Риторический вопрос CodeBlocks написан полностью на нем, есть еще Audacity - звуковой редактор.Редактор уровней для движка Unreal Engine.
Я имел в виду кто-нибудь ИЗ ВАС на WxWidgets пишет профессионально?
То что этим пользуется Unreal это конечно круто, но там много кодеров, а я один! И если мне нужно "набросать" простую утилиту-калькулятор или простой редактор полей базы, то не хочу возвращаться в Делфи(платный и умирающий с каждым выходом нового релиза, не смотря на все свои достоинства)...

Не по теме:

Например надо было в трей запихнуть автоматический проверяльщик сайта (скачать zip/отправить zip) - 5-6 кнопок, мемо и 2-3 едитора для настроек. Работы на 5-6 часов. Графический дизайн сделал за 5 минут - остальное писал функционал кнопок. Мне часто приходится писать такие "утилитки". Желательно маленького размера, а не в 40-50мб. И шустрые. Поэтому пока и не смотрю на Qt.



Цитата Сообщение от 0x10 Посмотреть сообщение
В редакторе wxSmith есть вкладка Layout с различными сайзерами. Можно таскать мышкой на форму и комбинировать как нравится. Результат, отображаемый в редакторе, отличается от фактического хотя бы потому, что в моем случае редактор, например, не учитывает высоту и ширину родительского wxDialog и отображает все более компактно.
Понятно что "чуть-чуть" будут отличаться, но раньше привык просто выставлять у кнопки "прижать влево" и она отодвигала остальные кнопки... И это-же задавало кнопке автоматическую высоту... Теперь похоже все это делается ТОЛЬКО через код... Неприятно... Надо привыкнуть...
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.07.2015, 10:20 7
Цитата Сообщение от Tester64 Посмотреть сообщение
Понятно что "чуть-чуть" будут отличаться, но раньше привык просто выставлять у кнопки "прижать влево" и она отодвигала остальные кнопки... И это-же задавало кнопке автоматическую высоту...
Мне сложно воспринимать художественный пересказ gui-лейаута. Можно пример картинкой? Хоть в пеинте. Я же выше написал, что лейауты в графическом редакторе есть. Может быть, я просто не понял какого результата хочется получить?
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.07.2015, 10:56  [ТС] 8
Цитата Сообщение от 0x10 Посмотреть сообщение
Мне сложно воспринимать художественный пересказ gui-лейаута. Можно пример картинкой? Хоть в пеинте. Я же выше написал, что лейауты в графическом редакторе есть. Может быть, я просто не понял какого результата хочется получить?
Тяжело это сделать статическими картинками. Там в каждом элементе (кнопке, панели, мемо,..) было поле (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
Цитата Сообщение от Tester64 Посмотреть сообщение
Но высота осталась те-же 30 пикселов! Раньше я бы получил растягивание кнопок и в верх в высоту.
У кнопок есть флаг Expand.
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 минуты
Цитата Сообщение от Tester64 Посмотреть сообщение
Может я зря затеял эту возню с wxWidgets?
Вы хотите получить результат сразу как в Дельфи, тут такого не получится,чтобы получить нужный результат все нужно делать руками, сомневаюсь что wxSmith может выдать сложный лейаут.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.07.2015, 11:27 12
Цитата Сообщение от Tester64 Посмотреть сообщение
олучил равномерное растягивание двух тонких кнопок 50%(это управляется? могу поставить 60/40? в настройках нет.) от ширины.
Есть свойство prorortion.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.07.2015, 11:32 13
Не знаю, насколько это соответствует ожиданиям, но просто потыкав wsSmith получил такой результат.
Миниатюры
WxWidgets - кто пользуется   WxWidgets - кто пользуется  
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.07.2015, 12:23  [ТС] 14
Цитата Сообщение от smartpointer Посмотреть сообщение
В виджетах сам сайзер берет полностью полость окна родителя.
Меня убивает то что если если я положил на окно родитель не тот сайзер, то все! Стирай и начинай с начала... В делфи у меня был проект в котором было больше 400 кнопок на одной форме. Прятал в закладки, выносил на главное окно, растягивал одну из важных в данный момент кнопок вдоль всего низа или верха "окна-родителя". Копировал и вставлял дубли десятками (все настройки выделенного уже устраивает - надо лишь другие обработчики на кнопки назначить)

Я уже поигрался с рабочей областью, накидал компонент, уже даже приписал к некоторым код (хелло ворд, но все-таки). А теперь надо положить на основу сайзер... Похоже ВСЕ переписывать надо! Причем даже не могу сделать форму-клон и скопировать оттуда нужное! Вроде элементарные вещи, я сам такое на Делфи писал за неделю-две! почему-же сишникам это не нужно??? Я понимаю что перейдя на С++ я должен и думать научиться "по другому", но пока мне это не понятно! неделя-две работы для профи и редактор станет крайне удобным...

А как дело обстоит в Qt? Или в MSВижуалС++?
0
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
04.07.2015, 13:29 15
Цитата Сообщение от Tester64 Посмотреть сообщение
Меня убивает то что если если я положил на окно родитель не тот сайзер, то все! Стирай и начинай с начала... В делфи у меня был проект в котором было больше 400 кнопок на одной форме. Прятал в закладки, выносил на главное окно, растягивал одну из важных в данный момент кнопок вдоль всего низа или верха "окна-родителя". Копировал и вставлял дубли десятками (все настройки выделенного уже устраивает - надо лишь другие обработчики на кнопки назначить)
Вы думаете wxWidgets это не умеет ? Умеет, в том числе изменять все это динамически. Скиньте сюда или ко мне в личку ваш exe-шник - попробую скопировать со всеми растяжениями и отступами.
Цитата Сообщение от Tester64 Посмотреть сообщение
А как дело обстоит в Qt? Или в MSВижуалС++?
Тоже самое, возможно с большим функционалом. Имхо - это не повод забивать на инструментарий, не разобравшись в нем.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.07.2015, 13:35 16
Цитата Сообщение от smartpointer Посмотреть сообщение
Вы думаете wxWidgets это не умеет ?
Насколько я понимаю, у автора претензии не к библиотеке, а к визуальному редактору. В частности, касательно невозможности изменения типа сайзера средствами wxSmith. Естественно, на уровне кода это делается без проблем.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.07.2015, 14:03 17
Цитата Сообщение от Tester64 Посмотреть сообщение
Или в MSВижуалС++?
очень и очень плохо.

работая с 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
Цитата Сообщение от 0x10 Посмотреть сообщение
Насколько я понимаю, у автора претензии не к библиотеке, а к визуальному редактору. В частности, касательно невозможности изменения типа сайзера средствами wxSmith. Естественно, на уровне кода это делается без проблем.
угу! Если бы я хотел заниматься дизайном окошек на уровне кода, я бы в вин-апи залез - там возможности на порядок гибче чем в любом мультиОС...

Мне не нужен сложный дизайн (анимации, хитрые компоненты, сложные списки)! Предстоит нарисовать несколько своих ОЧЕНЬ сложных компонент(графики с зумом и вращением + особый текстовый редактор цветных строк - каждая строка рисуется и красится своей формулой)! Вокруг которых будет много простых кнопочек, едиторов и галочек. Кнопки нужны в основном для отладки моего компонента и для удобства во время будут часто переноситься. В коде это писать не хочется - хочется "схватил и поставил там где удобнее", если надо с мини размера развернул на пол экрана...

Не по теме:

Когда писал на Делфи подобное (хочу портировать) тест каждой функции посадил на кнопку со счетчиком(текст-количество успешных тестов), галочкой(исключить из массовых автотестов) и панелькой-лампочкой (цветом состояние). Мог копировать и вставлять куда хочу. Мог поменять размер любой кнопки для удобного нажатия мышкой. Мог переносить кнопки между закладками (копи-пасте между "разделами" тестов). В 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2015, 14:31
Помогаю со студенческими работами здесь

Mingw и wxWidgets
Появилась необходимость разработать программу, используя wxWidets. Распаковал, собрал, попытался...

Имитация действий в wxWidgets
Добрый день! Есть такая проблема. Программа, написана на Visual C++ с использованием wxWidgets....

WxWidgets wxPuts ошибка
Здравствуйте я начал учиться работать в wxWidgets но тут при компиляции простого кода в...

WxWidgets - в консольном приложении
Начал изучение библиотек wxWidgets в Code Blocks, столкнулся с проблемой компиляции, вроде все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru