MFC vs Qt |
Здравствуйте, гость ( Вход | Регистрация )
MFC vs Qt |
Rocky |
29.1.2011, 21:08
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
А я вот пока к студии больше склоняюсь в выборе инструмента для данной программы. Ибо там отладчик быстрее и удобнее Так... Знаешь, я лет 5 писал с помощью студии.. (начиная с 6-й). Отладчик там может в чем-то и удобнее, но минусов в самой IDE намноооооого больше чем в QtCreator. MFC - говнотехнология, которая изжила себя наверное раньше, чем появилась. Пиши тогда уж на асме сразу. Это очень круто. Хотя это дело твое на чем писать. А заявление Rocky - это юношеский максимализм, такой же, как выдают линуксоиды про винду. Это не максимализм. Предполагалось, что человек с иронией прочитает ее и немного улыбнется. А ты хочешь сказать, что все линуксойды страдают юнешским максимализмом и не любят винду только из-за этого? Это полный бред. Сообщение отредактировал Rocky - 29.1.2011, 23:48 |
|
|
Алексей1153 |
30.1.2011, 14:48
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Litkevich Yuriy, позволь я таки отвечу. И не буду больше разжигать это дело.
Это не максимализм. Предполагалось, что человек с иронией прочитает ее и немного улыбнется. я уже настолько начитался подобных глупых высказываний, что предпочитаю вообще не реагировать. Но глаза открыть тебе охота (тебе же это и будет полезно) 1) я лет 5 сидел в студии 6 и 4 года в студии 9. Так что не надо мне расписывать про то, как и где там удобно 2) MFC это не говнотехнология, как ты наивно полагаешь, а необходимость. Это оболочка над WinAPI рутиной, которая по сути ничем не отличается от чистого API, посколько после компиляции буддут точно такие же вызовы API, ничуть не снижая производительности. Но MFC позволяет экономить время и силы, являясь оболочкой, превращающей чистый Си в почти ООП. Надеюсь, ты знаешь, как нежно дружат чистый Си и ООП. Отсюда и нападки на MFC. А мелкософтовцы молодцы - сделали почти невозможное. А умирать MFC не собирается, а кроме того - поддерживается, включая и в последних версиях студии (в 10 - точно есть). Пока люди пишут программы под винду, MFC не умрёт. 3) за что линуксоиды не любят винду. А кто их знает Наверное за то же самое, за что я не люблю линукс. У всех разные цели и предпочтения. 4) отвечать на этот пост не нужно. Холиваров не будет! Сообщение отредактировал Алексей1153 - 30.1.2011, 14:49 |
|
|
Rocky |
31.1.2011, 10:27
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Litkevich Yuriy, раздели пожалуйста тему... Я не могу пропустить обвинения в глупости в свой адрес.
Это оболочка над WinAPI рутиной, которая по сути ничем не отличается от чистого API, посколько после компиляции буддут точно такие же вызовы API, ничуть не снижая производительности. Скажи, а ты пробовал писать мало-мальски нормальный OpenGL/DirectX-проект с использованием MFC? Попробуй. А потом перепиши его на чистом WinAPI. Потом сделай бенчмарки и удивись результатам. Но MFC позволяет экономить время и силы, являясь оболочкой, превращающей чистый Си в почти ООП А можно по-подробнее? Я что-то не понял при чем тут чистый С. Я ващет думал что MFC написан на С++. А... ты имеешь в виду что функции WinAPI написаны на С... Понятно. А, пардон, Qt тогда что? Для винды это не обертка над WinAPI? Та же самая обертка, только сделана лучше и продуманее. А почему я должен использовать какие-то непонятные громоздкие (практически недокументированные) С-структуры в функциях "Объекто-Ориентированного" MFC? Почему для реализации некоторых вещей, я должен использовать callback-вызовы и связанные с ними глобальные функции? Это по-твоему отличная ОО среда? Насчет экономии времени и сил. Я несколько лет работал в конторе, для которой писал программу для спектрального анализа на MFC. В силу своей специфики там очень много всего (количесвто строчек не показатель конечно, но сотни полторы тысяч строк было). Написание самого кода на MFC заняло у меня около 1.5 лет. Потому что при попытке сделать что-то свое наталкиваешься на стену и ограничения MFC. А дальше 2 варианта: либо переписывать участки кода на чистом WinAPI (в итоге проект получается "грязным" и "некрасивым"), либо реализовывать то что нужно через такую ж. А на Qt все то же самое получилось за 4 месяца. И код стал намного более прозрачный, легче поддерживаемый. И объем стал на порядок меньше. Отсюда и нападки на MFC Нет. Нападки на MFC не отсюда. Я могу перечислить с десяток "особенностей" работы с MFC (это то, что осталось в моей памяти спустя 2.5 года не использования MFC). Эти "особенности" приводят к ночным посиделкам возле отладчика. Кому как, а я лучше с женой это время проведу. А то, что ты при знании Qt все равно склоняешься к написанию программы на MFC говорит о том, что ты не являешься спецом ни там, ни там. А умирать MFC не собирается, а кроме того - поддерживается, включая и в последних версиях студии (в 10 - точно есть). То, что его включают в новые версии фрэйморка еще не значит, что он поддерживается. "Поддержка" Qt3 тоже есть. И есть много людей, которые пишут с использованием Qt3. А добавляется ли что-то новое в Qt3 и фиксятся ли баги не в курсе? Что нового появилось в MFC с Visual Studio 6 по VS 2008 (2010)? Хоть один новый класс/контрол? Даже если что-то новое и появилось в VS 2010, то это уже похоже на агонию (10 лет не было абсолютно ничего нового). Скажешь что все итак супер? А почему тогда такое огромное количество дополнительных классов, контролов да и целых оберток над MFC? Я например не хочу и не буду использовать закрытый код дяди Васи в своих проектах. Хрен его знает что он там делает. Я лучше свой буду писать. Только зачем? А ты когда последний раз был в книжном магазине? Какую новую книгу по MFC ты видел? Я например в качестве мини-хобби люблю ходить в магазины компьютерной литературы. Видимо, каждый раз до меня кто-то по MFC все скупает.. Жаль. Да, и вообще-то мелкомягкие продвигают С# и платформу .NET (win forms и иже с ними) как средство разработки под windows. Но никак не MFC. То, что она включается в текущие версии студии лишь благодаря тому, что написано огромное количество программ с использованием MFC. Держу пари, что внутри MFC куча механизмов, которые для тебя (как и для большинства людей в мире) являются абсолютно непрозрачными. за что линуксоиды не любят винду. А кто их знает Наверное за то же самое, за что я не люблю линукс. У всех разные цели и предпочтения. Клевое высказывание. Я не люблю линукс. Точка. У тебя видимо стереотип сложности настройки/работы сей ОС. Ну-ну. И вообще насчет студии. Вот ты за деньги разрабатываешь программные продукты. А студию ты купил? Или крякнутой пользуешься? А MSDN (который отдельно продается)? ЗЫ. Я не спорю, сама IDE удобная. Можно даже аттачиться к запущенным процессам и трассировать исходник. Отладчик - да, супер. Edit and continue - вообще вещь. Только gdb тоже можно настроить чтобы был думаю не хуже чем студийный. Но вот трактование стандарта С++ мелкомягкими - это пипец. Это хорошо, если ты соображаешь что делаешь. Сообщение отредактировал Rocky - 31.1.2011, 10:47 |
|
|
Алексей1153 |
31.1.2011, 11:04
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
А можно по-подробнее?
Я не могу пропустить обвинения в глупости в свой адрес. я такого и не говорил Rocky, никто также не говорил, что везде следует MFC толкать, всё зависит от цели. А по производительности - это где-то у тебя ошибки были, значит, так как скорости теряться просто негде А можно по-подробнее? Я что-то не понял при чем тут чистый С. Я ващет думал что MFC написан на С++. А... ты имеешь в виду что функции WinAPI написаны на С... Понятно. А, пардон, Qt тогда что? Для винды это не обертка над WinAPI? Та же самая обертка, только сделана лучше и продуманее. А почему я должен использовать какие-то непонятные громоздкие (практически недокументированные) С-структуры в функциях "Объекто-Ориентированного" MFC? Почему для реализации некоторых вещей, я должен использовать callback-вызовы и связанные с ними глобальные функции? Это по-твоему отличная ОО среда? 1) WinAPI написан на чистом C 2) Qt - это не оболочка, это библиотека. Если ты не заметил, в Qt окна рисуются графикой (только диалоги есть нативные ОС окна). 3) не хочется использовать недокументированное - не используй. Я не использую 4) при чём тут колбэки, я не понял, хотя бояться их - тоже непонятное дело. Они работают как раз гораздо быстрее сообщений винды или сигналов Qt 5) про какую среду ты говоришь ? >>Насчет экономии времени и сил. я сравниваю разработку на чистом АПИ и на MFC >>Я могу перечислить с десяток "особенностей" работы с MFC давай, я хоть узнАю про них. А с отладчиком все сидят, особенно, когда опыта ещё нет (только не подумай снова, что я тебя в неопытности обвиняю ) Опыт - он либо есть, либо его нет, в этом нет ничего обидного. Посидел с отладчико - получил опыт. В следующий раз сидеть будешь гораздо меньше) Книги давно не покупаю, всё из справочников и из форумов черпается. Мне и читать то некогда стало >>Да, и вообще-то мелкомягкие продвигают С# и платформу .NET мн не нравится дотнет и шарп. Кто на нём пишет - писают кипятком от ООПшности, но как только более или менее нетривиальная задача возникает - заплакали, полезли АПИ вызовы делать... А Qt по графике обскакивает дотнет с лёгкостью. >>У тебя видимо стереотип сложности настройки/работы сей ОС. Ну-ну. не стереотип, а факт ) >>И вообще насчет студии. Вот ты за деньги разрабатываешь программные продукты. А студию ты купил? Или крякнутой пользуешься? А MSDN (который отдельно продается)? конечно же версия сломанная. Ты же мне денег не пришлёшь, чтобы я её купил ) Про МСДН - не понял. Заходишь на сайт http://msdn.microsoft.com/ru-ru/library/ms123401.aspx, там всё бесплатно. По крайней мере ни разу не просили платить >>Но вот трактование стандарта С++ мелкомягкими - это пипец. примеры в студию ------------ а вообще - что так эмоционально реагируешь ? Тебя никто не обвиняет ни в чём. Сообщение отредактировал Алексей1153 - 31.1.2011, 11:05 |
|
|
Rocky |
31.1.2011, 12:48
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
я такого и не говорил Ок Qt - это не оболочка, это библиотека А MFC - это оболочка или библиотека? при чём тут колбэки, я не понял, хотя бояться их - тоже непонятное дело. Они работают как раз гораздо быстрее сообщений винды или сигналов Qt Я их не боюсь. Могу конечно ошибаться (давно это было), но попробуй написать перебор всех окон в системе? Каким принципам ООП это будет не соответствовать? про какую среду ты говоришь ? Имел ввиду написание программ с помощью MFC. Может не самое удачное слово конечно. я сравниваю разработку на чистом АПИ и на MFC А, пардон, значит не так понял. >>Я могу перечислить с десяток "особенностей" работы с MFC давай, я хоть узнАю про них. Ты меня троллишь? =) 1. При работе с ресурсами попробуй самовольно поменять идентификаторы в resource.h. Ну не нравится мне что они назначются не по порядку или начиная с 32000. Будут возникать косяки в самых разных местах. Потому что потом будут возникать коллизии идентификаторов. 2. Коллизии идентификаторов возникают даже, если не влезать в resource.h. 3. Если солюшен состоит и 5 проектов например, 4 из которых - это динамически подключаемые dll, а 1 - сам исполняемый модуль, который их подключает, не дай бог идентификаторы ресурсов будут где-то пересекаться. Проявления у меня были разные. Т.е. если идентификатор кнопки в одной dll имеет значение 5000, и в другой dll тоже 5000, то при нажатии на такую кнопку вообще все рушилось. И было абсолютно непонятно что и где и с какого момента отлаживать. Приходилось писать доп. прогу типа ResourceRedactor, который парсил resource.h и назначал уникальные номера. 4. Почему нельзя получать доступ к элементам управления окна не из экзэемпляра самого окна? Нужно дублировать данные в мемберах класса (видимо особенности механизма DDX/DDV). Если пробовать получить, возникают run-time ошибки. 5. Если я хочу создать свой класс (графический), то мне оказывается помимо new нужно еще и Create делать. А при удалении сначала Destroy, а потом delete. А попробуй создать вручную класс диалога. Например полностью в конструкторе другого класса. Это вообще возможно? Как реализовывать этот DDX? 6. Если у меня проект использует юникод, а я пытаюсь подключить к нему библиотеку не в юникоде - тоже будут проблемы. И далеко не очевидно как их решать. 7. Почему-то, где-то перед показом окна я должен переопределять обработчик OnInitDialog, а где-то OnInitialUpdate. 8. Используется устаревашая архитектура документ/вид. Как с каждым видом ассоциировать свои данные? Как разделять эти данные? И почему я вообще должен следовать таким принципам? Хочу сам создавать архитекуру приложения. Нельзя. 9. При создании нового класса с помощью ClassWizard (правда его после 6-й студии вроде убрали, забыл как называется в новых студиях эта штука) создается куча непонятного.... непонятных вещей. Попытки ручного добавления каких-то записей внутрь макросов DDX чреваты. 10. Попробуй не включить или включить не самой первой строкой в своем cpp stdafx.h. Возникает очень "понятная" ошибка. 11. Использование MFC совместно с COM - тоже не самые приятные воспоминания. Почему то даже при создании пустого проекта уже возникают ошибки линковки (причем как-то через раз). Зависело вроде от настроек multi threading. Типа несколько ф-й winmain (dllmain) в одном объектнике как-то получалось. 12. При работе с БД через ODBC (другие не пробовал, не знаю), возникают неочевидные ошибки рантайма при попытке считать одну и ту же запись 2 раза (причем на момент, когда я с ней столкнулся, почему-то нигде не было про это написано). 13. Я часто использую COM-подобный метод подключения внешних библиотек. Основан на создании интерфейса (со всякими AddRef/Release), реализации его в dll, и экспортируемой функции-фабрики классов из этой dll, возвращающей указатель на реализацию этого интерфейса в dll. Если в этом хидере интерфейса есть 30 методов, и в какой-то момент я решу удалить 27 например, то почему-то далеко не всегда (как я понял - "через раз") происходит смещение виртуальных таблиц. Т.е. при вызове 27-го по счету метода (после удаления), у меня вызывается 28-й. В итоге все рушится. Попытки deep clean ситуацию не проясняли. Видимо, что-то пишется куда-то еще. При использовании Qt такого не наблюдалось - тут все прозрачно. А так.... 1. Нет менеджеров компоновки и связанные с этим проблемы (например, при изменении шрифта программы или надписей в StaticText, сам текст в статиках может накладываться друг на друга - и про это нужно помнить и следить). 2. Нельзя добавлять содержимое к многим контролам прямо на форме. 3. Попытки сделать например CListCtrl с редактируемыми ячейками приводят к значительным потерям времени. А уж если я хочу чекбоксы туда вставить - вообще нужно свой custom control делать. Либо искать готовый. 4. Если я хочу изменить всего лишь цвет текста staticText, мне нужно изменить ему идентфикатор, поставить обработчик специальный, там ловить этот идентификатор, создавать нужную кисть, назначать ему эту кисть.... Слишком много всего. 5. В "форме атоматического добавления обрабочтков сообщений" приведены далеко не все нужные сообщения. 6. Нет поддержки xml. Работа с xml осуществляется через АПИ msxml.dll например. 7. Нет поддержки стилей, элементам управления нельзя задавать текст в html-формате. Может, конечно, что-то и не убедительно я описал, звиняйте. 2 года назад было больше всего в голове. Основная мысль: MFC - была отличная библиотека лет 5-7 назад. Но когда я чутка подрос, и полюбил свободу - я понял, что MFC ограничивает меня - это раз. Я должен делать так, как решили разработчики библиотеки. И не отвечает моим требованиям - два. Она зависла на уровне 2000 годов. И к тому же, почему я должен таскать с собой всю платформу .NET для запуска маааленькой програмки? И далеко не все сейчас используют висту или семерку, в которой она предустановлена. А чтобы поставить ее, я должен убедиться, что установлен ли еще инсталлер специальный. И иметь доступ к интернету (что есть далеко не везде). Последнее вероятно относится не к MFC а к самой IDE.... В Qt-тоже не все гладко конечно.. Но мне нравится. А еще более основная мысль - вообще не следует быть фанатом чего-то одного. Ни ЯП и IDE. >>У тебя видимо стереотип сложности настройки/работы сей ОС. Ну-ну. не стереотип, а факт ) Это требует отдельного обсуждения =) конечно же версия сломанная. Ты же мне денег не пришлёшь, чтобы я её купил ) Про МСДН - не понял. Заходишь на сайт http://msdn.microsoft.com/ru-ru/library/ms123401.aspx, там всё бесплатно. По крайней мере ни разу не просили платить Ну вот. Я например использовал триал. И каждые 3 месяца ее переставлял. Хотя я все-таки предпочитаю использовать либо open-source, либо покупать. Хотя чаще конечно open-source. По-поводу MSDN - да, есть онлайн. Тебе повезло если у тебя нормальный провайдер. У меня бывает вот срочно нужен интернет, а пров грит "извините, 3 дня инета не будет". Поэтому я предпочитаю чтобы дома и под рукой было все, что нужно. >>Но вот трактование стандарта С++ мелкомягкими - это пипец. примеры в студию Ну, мне например хватило следующего:
Вот такой код приводит к очень большим проблемам. То же касается std::set например. а вообще - что так эмоционально реагируешь ? Тебя никто не обвиняет ни в чём. Да нервный я стал совсем... Извини если что не так =) Видимо к психиатору пора (((((( |
|
|
Алексей1153 |
31.1.2011, 13:28
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Rocky, уж звыняй, много печатать не могу, рабочий процесс идёт!
А MFC - это оболочка или библиотека? это библиотека-оболочка Библиотека - это же шота собранное в кучку. А тут собраны классы-вропперы , которые сгруппировали вызова АПИ-функций по смыслу но попробуй написать перебор всех окон в системе? Каким принципам ООП это будет не соответствовать? эээ... А зачем перебор окон должен почему то соответствовать ООП ? Ну напиши класс, инкапсулируй туда статическую функцию и список найдёнышей. Будет ООПшнее некуда! про какую среду ты говоришь ? Имел ввиду написание программ с помощью MFC. Может не самое удачное слово конечно. вот меня тут пинают за оговорки (вроде студия==MFC, креатор ==Qt). Ну и как бы MFC - это не среда, это набор классов и функций. Разработчики сделали попытку превратить Си-рассыпуху в нечто более удобное и ООПшное. Сомневаюсь, что можно было сделать лучше. Но ведь писать на WinAPI приходится, а значит должен быть инструмент ухода от рутины, как это стал MFC (ну и множество других библиотек, я все и не знаю). Аналогия тут - машинныекоды(мамамия!)-ассемблер (ага, уже читабельно!) - макроассемблер (вау!) Неа, не троллю. При работе с ресурсами попробуй самовольно поменять идентификаторы в resource.h. регулярно этим занимаюсь. И что ? Коллизии идентификаторов возникают даже, если не влезать в resource.h. у меня не возникали. Более того , если я студийный счётчик собью в resource.h, - ни шестёрка, ни девятка даже бровью не ведут, исправляют ди и всё. Ну не знаю - не было у меня таких проблем! (дописал ))) ) 3 - у каждого проекта свой ресурсный файл. У меня 3 проекта в одном решении - не пересекаются вроде 4 - как это нельзя ? GetDlgItem(ID). Но нельзя сохранять и использовать указатели и хендлы контролов, которые описаны шаблоном диалога. А вот свои собственные, созданные без DDX - пожалуйста 5 - Create - создаёт объект Windows HWND . Если ты можешь сделать это иначе - вперёд 6 - переведи однобайтовый в юникод. (WCHAR, wstring, _T("") ) 7 - OnInitDialog - мембер класса CDialog, OnInitialUpdate - класса CView. В Qt тоже есть методы, не общие для всех классов 8 - я не использую. Я класс документа не заполняю никогда, у меня всё во вьюхе 9 - в девятке визард убогий. Но к MFC это никак не относится - делай вручную, да и всё ) Всё лишнее можно и удалить после создания класса. А глюки при правке - это уж, извините, не правки виноваты, а когда не знаешь, как это делается 10 - Но никогда вручную править DDX не приходилось - я не пользуюсь UpdateData() , только GetDlgItem(). А промоушены визард расставляет нормально 11 - COM не приходилось использовать. 12 - работал с FireBird через CDataBase + CRecordSet. У меня всё работало ) А для mysql вызываю их нативные функции, без посредников 13 - не знаю, о чём речь, не могу сказать. Скорее всего поможет полный ребилд 1 - менеджеры компоновки в студии особо не нужны, там всё кнопками выравнивается в редакторе форм 2 - какое содержимое ? 3 - да, придётся один раз написать свой класс. Всё за тебя не напишут (повторюсь, что MFC - это лишь скромный вроппер АПИ) 4 - CWnd::OnCtlColor 5 - это ты про студию №6 ? В девятке всё есть. Ну а чего нету - смотришь в МСДН, копируешь обработчик. Или ещё проще - в оконной процедуре лови сообщение сразу 6 - я применял Markup113 . Могу приложить, если интересно 7 - это см пункт 3. Когда нужна графика - выбирай другой инструмент, тот же Qt Дотнет таскать с собой не надо, конечно же. Мне тоже не нравится этот монстр. К счастью, это не единственная платформа в мире для винды ))) >>Ну вот. Я например использовал триал. И каждые 3 месяца ее переставлял. это твои личные садо-мазо-программистские склонности Но в данной теме это не нужно обсуждать, я думаю. >>itTest->first = 10;Language: cpp компилятор не даст поменять ключ без неявного приведения. Ты точно это пробовал ? и к каким проблемам привело ? Сообщение отредактировал Алексей1153 - 31.1.2011, 13:32 |
|
|
Rocky |
31.1.2011, 14:12
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Ну и как бы MFC - это не среда Вот пристал =) Я имел ввиду что не среда в смысле IDE ессно, а в смысле окружение программного кода. 4 - как это нельзя ? GetDlgItem(ID). Т.е. хочешь сказать что я могу получить текст из CEdit например но не из класса который инкапсулирует объект этого CEdit? Ок, чисто ради интереса освежу в памяти этот момент... Тока надо бы найти 6-ю студию. Но я помню свое удивление, когда я понял, что в Qt можно делать так:
3 - у каждого проекта свой ресурсный файл. У меня 3 проекта в одном решении - не пересекаются вроде В том-то и дело что разные ресурсные файлы. Но там может дело было в том, что я на форму из основного приложения клал формы то с одной, то с другой dll (делая при этом их чайлдами главной формы) 5 - Create - создаёт объект Windows HWND . Если ты можешь сделать это иначе - вперёд Ну как-бы да. Но ведь я не пишу:
работал с FireBird через CDataBase + CRecordSet. У меня всё работало ) MS Access + ODBC (класс не вспомню уже какой). Вот при таком (читать как псевдокод):
все падало. 2 раза нельзя считывать. менеджеры компоновки в студии особо не нужны, там всё кнопками выравнивается в редакторе форм Ну конечно. Разворачиваем окно и что с кнопками? Сами ресайзятся? Сделай локализацию. Помести в CStaticText "вот такую строку" типа для русской локали. А потом поменяй на английскую. И задай в тот же статик "this string is situated in static-text-class!!!". И что будет с CStaticText? Сам изменится в размерах и сделает zoomToFit? Или текст обрежется? Да, вот что еще вспомнил... Помести в тот же CStaticText строку из например 1000 символов. И запусти. До 2003 студии включительно при попытке отображения диалогового окна с таким CStaticText программа падала. 2 - какое содержимое ? Я могу например заранее не влезая в код сформировать список CListCtrl? Имею ввиду прямо на форме. 4 - CWnd::OnCtlColor Да, именно он ). >>itTest->first = 10; компилятор не даст поменять ключ без неявного приведения. Ты точно это пробовал ? и к каким проблемам привело ? Ну, 2008 студия глотает без проблем. Повторюсь, то же относится к std::set. К каким проблемам... Ну, например может не правильно работать std::map::find после такого. И оно понятно почему. Сообщение отредактировал Rocky - 31.1.2011, 14:14 |
|
|
Алексей1153 |
31.1.2011, 14:52
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Вот пристал =) замечу, это не я пристал. Кто попросил отделить тему и продолжил задавать вопросы ? Т.е. хочешь сказать что я могу получить текст из CEdit например но не из класса который инкапсулирует объект этого CEdit? Ок, чисто ради интереса освежу в памяти этот момент... не только хочу сказать, но только так и возможно - по ID контрола. Даже межпроцессорно, но только тут надо чистый АПИ применять, а то реакции не будет. Ещё один момент отмечу: CEdit инкапсулирует HWND и всё. Хендл окна. Но в классе добрые разработчики прописали много полезных функций - какие то являются вропперами API, какие-то уникальны для CEdit Ещё один фокус: к примеру, имеется хендл HWND h. Неважно, как его создали, но важно, что это виндовый нативный класс edit control. Можно сделать так:
усё все падало. 2 раза нельзя считывать. не нашёл у себя использования метода record(0); - может и нет такого в этих классах, которые я упомянул А снапшот, к примеру, нельзя читать в произвольном порядке, только в одном направлении А чтоб не падало, лови исключения Ну конечно. Разворачиваем окно и что с кнопками? Сами ресайзятся? сгруппировать ID в массивы и вручную размещать по нужной сетке в OnWindowPosChanged(); класс CStaticText не знаю. >>Я могу например заранее не влезая в код сформировать список CListCtrl? Имею ввиду прямо на форме. это можно и нужно делать в OnInitDialog. Ну представь - а где будут храниться введённые тобой строки, если окна ещё нет ? Даже в конструкторе класса этот контрол ещё не создан >>Ну, 2008 студия глотает без проблем. я попробовал в 2008 - ругается на попытку изменить константный мембер более того, попробовал в шестёрке - тот же результат : error C2166: l-value specifies const object |
|
|
Rocky |
31.1.2011, 15:06
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
сгруппировать ID в массивы и вручную размещать по нужной сетке в OnWindowPosChanged(); Ну так тебе самому это нужно делать. Руками. А в Qt за эти следят менеджеры компоновки. не нашёл у себя использования метода record(0); - может и нет такого в этих классах, которые я упомянул Я ж написал что это псевдокод. Такого метода может и нет. Смысл в том что это "запись полученная из БД в результате запроса SQL". Цитата А чтоб не падало, лови исключения Дело не в том чтобы ловить исключения. Напишите в MSDN что так делать нельзя. Напишите спецификацию исключений этой функции. Этого ведь нет. >>Я могу например заранее не влезая в код сформировать список CListCtrl? Имею ввиду прямо на форме. это можно и нужно делать в OnInitDialog. Ну представь - а где будут храниться введённые тобой строки, если окна ещё нет ? Ну а где они хранятся в редакторе форм QtDesigner? Что же это за Visual Studio, в которой я не могу прямо на форме заполнить комбобокс? Или список какой-нить? >>Ну, 2008 студия глотает без проблем. я попробовал в 2008 - ругается на попытку изменить константный мембер Весьма странно. Хотя может это дистр такой у меня? Приду домой проверю. |
|
|
Алексей1153 |
31.1.2011, 15:14
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Ну так тебе самому это нужно делать. Руками. А в Qt за эти следят менеджеры компоновки. Вот, кстати! Ты недоумеваешь, зачем и почему существует MFC и не собирается умирать. А ведь он делает с АПИ то же самое - избавляет от многой рутины ( как и все прелести Qt) . Ну а полной аналогии и соотвествия между библиотеками не ищи - они устроены по разному и для разного предназначены. Напишите в MSDN что так делать нельзя. Напишите спецификацию исключений этой функции. Этого ведь нет. без конкретных примеров я тут ничего не могу прокомментировать Ну а где они хранятся в редакторе форм QtDesigner? сначала они записываются в XML, а при компиляции попадают непосредственно в конструктор диалога (вернее, вызов setup происходит оттуда) Сообщение отредактировал Алексей1153 - 31.1.2011, 15:14 |
|
|
Текстовая версия | Сейчас: 28.12.2024, 10:47 |