Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) wxWidgets альтернатива Qt ? (число прочтений - 16750 )
nikolka
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
wxWidgets альтернатива Qt ?
07. Июня 2008 :: 15:33
Печать  
Есть такая кросс-платформенная библиотека инструментов с открытым исходным кодом для построения графического интерфейса пользователя (GUI).
Библиотека разработана на C++, но может подключаться ко множеству других распространённых языков, таких, как Python (wxPython), Smalltalk (wxSqueak), Perl и Java.
Проекты поддержки языков программирования:
wxBasic — для Бэйсик
wxPerl — для Перл
wxPython — для Python
wxRuby — для Руби
wxSqueak — для Smalltalk
wxLua — для Lua
wx4j — для Java
wxJS — для JavaScript
wxHaskell — для Haskell
wxEiffel — для Эйфель
wxD - для D
wx.NET — для .NET
wxErlang — для Erlang
Долее подробно в википедии :
http://ru.wikipedia.org/wiki/WxWidgets
И на форуме:
http://forums.realcoding.net/index.php?showforum=145.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #1 - 07. Июня 2008 :: 16:10
Печать  
Да, только программить с её использованием посложнее чем с исп. Qt.
Хотя и хорошая вещуха....
Если нужна литература, искать в гугле по Земсков.
« Последняя редакция: 08. Июня 2008 :: 07:55 - trdm »  
Наверх
IP записан
 
Kemet
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 46
Зарегистрирован: 03. Октября 2007
Re: wxWidgets альтернатива Qt ?
Ответ #2 - 18. Августа 2008 :: 09:18
Печать  
Ссылок на Земского много, только они битые Печаль
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #3 - 18. Августа 2008 :: 10:32
Печать  
Есть скомпилированный, но он весит 2 Мб.
  
Наверх
IP записан
 
Kemet
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 46
Зарегистрирован: 03. Октября 2007
Re: wxWidgets альтернатива Qt ?
Ответ #4 - 18. Августа 2008 :: 13:06
Печать  
trdm писал(а) 18. Августа 2008 :: 10:32:
Есть скомпилированный, но он весит 2 Мб.

скомпилированный из чего?
2МБ это совсем не много
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #5 - 19. Августа 2008 :: 05:48
Печать  
Немного, но тут не воткнуть.
  
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #6 - 19. Августа 2008 :: 08:23
Печать  
trdm писал(а) 19. Августа 2008 :: 05:48:
Немного, но тут не воткнуть.

"Максимальный размер прикрепленного файла: 2500 KB"
  
Наверх
www  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #7 - 19. Августа 2008 :: 08:37
Печать  
ОК. Тады крепим.
  

mechta34_WX.chm ( 1603 KB | Загрузки )
Наверх
IP записан
 
Kemet
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 46
Зарегистрирован: 03. Октября 2007
Re: wxWidgets альтернатива Qt ?
Ответ #8 - 20. Августа 2008 :: 01:47
Печать  
Благодарю.
Вот еще, только на аглицком
http://cross.gethosted.info/uploads/cpp/wxwidgets/Cross-Platform_GUI_Programming...
« Последняя редакция: 20. Августа 2008 :: 04:32 - Kemet »  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #9 - 23. Августа 2008 :: 08:12
Печать  
Судя по характеру одработки сообщений:
Код
Выбрать все
1. Declare a new class that is derived directly or indirectly from wxEvtHandler.
2. Add a member function for each event that must be handled.
3. Declare the event table in the class with DECLARE_EVENT_TABLE.
4. Implement the event table in the source file with  BEGIN_EVENT_TABLE...
END_EVENT_TABLE.
5. Add event table entries to the table (such as EVT_BUTTON), mapping each
event to the appropriate member function.
 


wxWidgets скорее альтернатива MFC, чем Qt.
Опять все теже карты сообщений и т.п. фигня...
короче опять куча макросов и т.п.
До Qt она никогда не дорастет ни по удобству программинга с этими макросами.
  
Наверх
IP записан
 
Kemet
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 46
Зарегистрирован: 03. Октября 2007
Re: wxWidgets альтернатива Qt ?
Ответ #10 - 25. Августа 2008 :: 02:14
Печать  
методы connect()/ disconnect() тебе помогут
==
Код
Выбрать все
connects the given function dynamically with the event handler,
id and event type. this is an alternative to the use of static event tables.
see the 'event' or the old 'dynamic' sample for usage.
 


  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #11 - 25. Августа 2008 :: 06:41
Печать  
А поможет оно избавиться от избыточного кода?
Код
Выбрать все
private:
// This class handles events
DECLARE_EVENT_TABLE()
 


Код
Выбрать все
// Event table for MyFrame
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU     (wxID_ABOUT,    MyFrame::OnAbout)
EVT_MENU     (wxID_EXIT, MyFrame::OnQuit)
EVT_SIZE     (		  MyFrame::OnSize)
EVT_BUTTON   (wxID_OK,	 MyFrame::OnButtonOK)
END_EVENT_TABLE()
 


Мало того, что нужно определить и имплементировать функцию, нужно еще повтыкать в карты сообщений.
И так в каждом эвент-классе....

в Qt это все элегантнее делатеся, без втыканий лишнего кода.
ПС. холиварчик выполз Улыбка
должен заметить, что ложность конструкции всегда ведет к возникновению ошибок.
  
Наверх
IP записан
 
Kemet
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 46
Зарегистрирован: 03. Октября 2007
Re: wxWidgets альтернатива Qt ?
Ответ #12 - 25. Августа 2008 :: 11:14
Печать  
в wxWidgets поддерживается два механизма обработки событий.
1) Карты сообщений - механизм призванный облегчить переход с MFC
2) Классы-обработчики  позволяют назначать обработчики динамически, во время выполнения программы. Этот механизм напоминает сигналы и слоты, используемые в Qt.
==
например:
Код
Выбрать все
 Connect(ID_BTN_OK, wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(MainFrame:: OnCommand));
 

где
ID_BTN_OK - идентификатор кнопки
wxEVT_COMMAND_BUTTON_CLICKED - имя события

В третьем параметре методу передается указатель на обработчик события. В объявлении метода Connect() третий параметр имеет тип wxObjectEventFunction. Указатель на фактически используемый метод-обработчик должен быть приведен к этому типу с помощью специального макроса. В нашем примере обработку события выполняет метод MainFrame:УжасnCommand(), а необходимое преобразование типа выполняется с помощью макроса wxCommandEventHandler(). Этот макрос используется для всех событий, чьи имена имеют префикс wxEVT_COMMAND (события, которые генерируются различными элементами управления пользовательского интерфейса).
Определение метода-обработчика OnCommand выглядит так:

void MainFrame:: OnCommand(wxCommandEvent& event)

Обработчик не возвращает значений, а единственным его аргументом является ссылка на объект класса wxCommandEvent. Один и тот же обработчик может использоваться для обработки самых разных событий от разных элементов управления. В этом случае из параметра event мы можем получить дополнительную информацию о событии. Класс wxCommandEvent является потомком класса wxEvent – базового для аргументов всех обработчиков событий.

Для генерации событий класс wxEvtHandler и его потомки предоставляют нам методы ProcessEvent() и AddPendingEvent(). Первый метод непосредственно вызывает обработчик события, второй метод позволяет поместить событие в очередь на обработку. У обоих методов определен только один параметр, в котором передается ссылка на объект класса-потомка класса wxEvent. Основываясь на типе этого объекта, wxWidgets определяет, обработчик какого события следует вызвать.

т.е. При создании каждого визуального элемента, который может быть источником событий, мы присваиваем ему числовой идентификатор, заданный константой (напомню, что мы можем выбрать значение wxID_ANY, если нам не нужно обрабатывать события данного элемента). Чтобы назначить обработчик события, мы вызываем метод Connect() объекта, реализующего главное окно. Этому методу передаются идентификатор визуального элемента, имя события и обработчик события.
==
Код
Выбрать все
class MainBook : public wxPanel
{
	Notebook *m_book;
	wxChoice *m_choiceFunc;
.....
protected:
	void OnFunction(wxCommandEvent &e);
	void OnMouseDClick(wxMouseEvent &e);
public:
....
};
 


==
Код
Выбрать все
MainBook::MainBook(wxWindow *parent): wxPanel( parent )
{
....
	m_choiceFunc = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxSize(600, -1), chcs);
	m_choiceFunc->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(MainBook::OnFuncListMouseDown), NULL, this);

	m_book = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style);
	m_book->GetTabContainer()->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(MainBook::OnMouseDClick), NULL, this);
....
}

void MainBook::OnFunction(wxCommandEvent &e)
{
	int sel = e.GetSelection();
	if(sel != wxNOT_FOUND){
		TagEntry *tag = (TagEntry*) m_choiceFunc->GetClientData(sel);
		if(tag){
			LEditor *editor = ManagerST::Get()->GetActiveEditor();
			if(editor) {
				wxString pattern(tag->GetPattern());
				ManagerST::Get()->FindAndSelect(editor, pattern, tag->GetName());
				editor->SetActive();
			}
		}
	}
}
void MainBook::OnMouseDClick(wxMouseEvent& e)
{
	wxUnusedVar(e);
	Frame::Get()->DoAddNewFile();
}

void MainBook::OnFuncListMouseDown(wxMouseEvent &e)
{
	....
	e.Skip();
}
 

  
Наверх
 
IP записан
 
Crym69
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 06. Октября 2008
Re: wxWidgets альтернатива Qt ?
Ответ #13 - 06. Октября 2008 :: 10:04
Печать  
Я поддерживаю Kemet. Действительно QT слишком громоздка, да и MOC не добавляет ей прелести.
А wxWidgets весьма привлекательный проект:
1. Кросплатформенный.
2. Небольшой по размерам.
3. Начиная с 3-й версии ведется политика не использования директив #define там где не нужно.

4. Как для меня. wxWidgets более понятен в изучении.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #14 - 06. Октября 2008 :: 13:38
Печать  
Crym69 писал(а) 06. Октября 2008 :: 10:04:
Я поддерживаю Kemet....

QT слишком громоздка -> она модульна и более обширна.
1. Кросплатформенный -> Qt кросплатформенна.
2. Небольшой по размерам. -> используешь только то что надо и размер дистрибутива меньше.

"4. Как для меня. wxWidgets более понятен в изучении" + "MOC не добавляет ей прелести." -> этот пункт думаю понятен.
Сможешь ответить зачем введен MOC?

ПС. А вообще к чему это все было? Ну нравится и юзай.
Я предпочитаю Qt.

В нулевом посте описана куча всяких типа вкусностей, но вот в чем вопрос, кому оно надо? Да никому...
  
Наверх
IP записан
 
Yhrik
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Января 2009
Re: wxWidgets альтернатива Qt ?
Ответ #15 - 13. Февраля 2009 :: 08:14
Печать  
[quote]Другая отличительная возможность это то что WxWidgets использует родные для операционной системы графические элементы интерфейса. Многие фраймворки используют собственные графические элементы пользователя, запускаемые на каждой платформе, снабжая их сменяемыми темами для каждой платформы. В диаметральнопротивоположном подходе, WxWidgets использует родные графические элементы пользовательского интерфейса повсюду где это возможно. В результате они не просто выглядят как родные для ОС, а они на самом деле родные для ОС. [/quote]
Интересная вещь. Хотя не представляю как это возможно, например в Win ComboBox имеет фиксированную высоту. Таких ньюансовна каждую систему наберётся до чёртиков.
Но список приложений впечатляет.
Скачал wxWidgets-DialogsDemo-Windows.zip, весьма неплохо.
« Последняя редакция: 13. Февраля 2009 :: 09:26 - Yhrik »  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #16 - 26. Марта 2009 :: 14:13
Печать  
Я кстати так и не вкурил, почему использование родных контролов является преимуществом.
По мне так лучше собственный навороченный контрол, чем зачастую убогий нативный.
  
Наверх
IP записан
 
Yhrik
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Января 2009
Re: wxWidgets альтернатива Qt ?
Ответ #17 - 28. Марта 2009 :: 06:42
Печать  
trdm писал(а) 26. Марта 2009 :: 14:13:
Я почему использование родных контролов является преимуществом.

Нестандартные контролы выглядят и ведут себя непривычно. Мелочи, а дискомфорт есть.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wxWidgets альтернатива Qt ?
Ответ #18 - 28. Марта 2009 :: 08:57
Печать  
Лучше временный дискомфорт, чем ограниченная функциональность.
Вот например 2 моих самопальных виджета: простой выбор цвета и выбор типа рамки. Кто-нить почувствовал дискомфорт?
  

noWxYesQt.JPG ( 38 KB | Загрузки )
noWxYesQt.JPG
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать