Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Программа "Hello Qt" 
:(
    Опции темы
yngwie19
Дата 22.5.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Здравсвуйте. Закончив изучение WinAPI решил взяться за QT. Вот пример простой программы для QT, в котором Я хочу провести аналогию структуры программы WinAPI
Код

 1 #include <qapplication.h>
 2 #include <qlabel.h>
 3  int main(int argc, char *argv[])
 4  {
 5     QApplication app(argc, argv);
 6     QLabel *label = new QLabel("Hello, Qt!", 0);
 7     label->show();
 9     return app.exec();
10  }

Теперь скажите правильно ли Я думаю:
1 и 2  - это понятно подключение библиотек. (в WINAPI также #include <windows.h> и т.д)
3 - точка входа в программу (в WINAPI это WinMain)
5 - вот тут мне не понятно зачем это. Проведите пожалуйста аналогию с WinPI
6 - Создаем окно класса Qlabel - текст (в WINAPI это CreateWindow("static","Сам текст")....)
7 - тут мы делаем созданное окно видимым (в WINAPI это ShowWindow(hwnd,SW_...) или в функции CreateWindow(стиль WS_VISIBLE)  )
8 - тут мы вызываем цикл обработки сообщений и возвращаем результат работы программы (в WinAPI это while(GetMessage(.....))(return msg.wParam)).

Объясните пожалуйста правильно ли Я все понял и объясните по-подробнее про 5 пункт.
P.S: Не знаю правильно ли Я считаю, что провожу такое сравнение, но все же считаю что если программа работает по Windows то по другому она работать не может. 
 
PM MAIL   Вверх
Любитель
Дата 22.5.2009, 13:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(yngwie19 @  22.5.2009,  13:21 Найти цитируемый пост)
P.S: Не знаю правильно ли Я считаю, что провожу такое сравнение, но все же считаю что если программа работает по Windows то по другому она работать не может. 

Не правильно. Изнутри - да, конечно, используется ВинАПИ (под виндой). Но это выскоуровневая ОО архтиектура.. Давай аналогию Model/View найдём в ВинАПИ? ;)

Ты становишься на ложный путь изучения smile


--------------------
PM MAIL ICQ Skype   Вверх
yngwie19
Дата 22.5.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Любитель, Хммм. А Вы могли бы меня на правильный путь напрвить и поясните для чего нужен п.5

Это сообщение отредактировал(а) yngwie19 - 22.5.2009, 14:30
PM MAIL   Вверх
kemiisto
Дата 22.5.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 8
Всего: 160



Цитата(yngwie19 @  22.5.2009,  11:21 Найти цитируемый пост)
Я хочу провести аналогию

yngwie19, наверное, Любитель, как бы говорит нам: не надо даже пытаться проводить аналогии там, где их нет и быть не может. smile 

WinAPI - штука специфическая. Qt ведь есть (в том числе) и на Mac OS X. Там другие API (Carbon, Cocoa). Пропасть между WinAPI и Cocoa API настолько огромна, что Qt добавляет дополнительный уровень абстракции. И вряд ли есть смысл искать аналогии Qt API с каким бы то ни было специфическим платформеннозависимым API... 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
yngwie19
Дата 22.5.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



kemiisto, Ясно, ну ладно спасибо что предупредили, все-таки объясните смысл п.5  smile 
PM MAIL   Вверх
kuzulis
Дата 22.5.2009, 15:20 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



читать (хотябы) : 
"QT4: программирование QUI на С++" , Жасмин Бланшет, Марк Саммерфилд.

Глава 1 . Первое знакосмтво.
стр. 4

Добавлено через 3 минуты и 17 секунд
читать Assistent :

Цитата

...
Detailed Description
The QApplication class manages the GUI application's control flow and main settings.
It contains the main event loop, where all events from the window system and other sources are processed and dispatched. It also handles the application's initialization and finalization, and provides session management. It also handles most system-wide and application-wide settings.
For any GUI application that uses Qt, there is precisely one QApplication object, no matter whether the application has 0, 1, 2 or more windows at any time. For non-GUI Qt applications, use QCoreApplication instead, which doesn't depend on the QtGui library.
The QApplication object is accessible through the instance() function which return a pointer equivalent to the global qApp pointer.
QApplication's main areas of responsibility are:
It initializes the application with the user's desktop settings such as palette(), font() and doubleClickInterval(). It keeps track of these properties in case the user changes the desktop globally, for example through some kind of control panel.
It performs event handling, meaning that it receives events from the underlying window system and dispatches them to the relevant widgets. By using sendEvent() and postEvent() you can send your own events to widgets.
It parses common command line arguments and sets its internal state accordingly. See the constructor documentation below for more details about this.
It defines the application's look and feel, which is encapsulated in a QStyle object. This can be changed at runtime with setStyle().
It specifies how the application is to allocate colors. See setColorSpec() for details.
It provides localization of strings that are visible to the user via translate().
It provides some magical objects like the desktop() and the clipboard().
It knows about the application's windows. You can ask which widget is at a certain position using widgetAt(), get a list of topLevelWidgets() and closeAllWindows(), etc.
It manages the application's mouse cursor handling, see setOverrideCursor()
On the X window system, it provides functions to flush and sync the communication stream, see flushX() and syncX().
It provides support for sophisticated session management. This makes it possible for applications to terminate gracefully when the user logs out, to cancel a shutdown process if termination isn't possible and even to preserve the entire application's state for a future session. See isSessionRestored(), sessionId() and commitData() and saveState() for details.
Since the QApplication object does so much initialization, it must be created before any other objects related to the user interface are created.
...
...

PM MAIL   Вверх
Любитель
Дата 22.5.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(yngwie19 @  22.5.2009,  15:02 Найти цитируемый пост)
все-таки объясните смысл п.5 

Если говорить про "аналогию" - то смысла в этом пункте нет. Смысл объекта QApplication - читаем ассистент. Одна из основных - инкапсуляций основного ивент-цкила (QEventLoop).


--------------------
PM MAIL ICQ Skype   Вверх
yngwie19
Дата 22.5.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Цитата(kuzulis @  22.5.2009,  15:20 Найти цитируемый пост)
читать (хотябы) : 
"QT4: программирование QUI на С++" , Жасмин Бланшет, Марк Саммерфилд.

: Объект Qt предназначен для управления всеми ресурсами приложения.
Вот это определение дано в этой книге. Мне кажется оно совсем не понятно. Это что цикл обработки событий?
PM MAIL   Вверх
Любитель
Дата 22.5.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Посмотри документацию в ассистенте. ДУмаю станет понятней (по методам класса).


--------------------
PM MAIL ICQ Skype   Вверх
Denjs
Дата 23.5.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Цитата(yngwie19 @ 22.5.2009,  16:05)
Цитата(kuzulis @  22.5.2009,  15:20 Найти цитируемый пост)
читать (хотябы) : 
"QT4: программирование QUI на С++" , Жасмин Бланшет, Марк Саммерфилд.

: Объект Qt предназначен для управления всеми ресурсами приложения.
Вот это определение дано в этой книге. Мне кажется оно совсем не понятно. Это что цикл обработки событий?

Если кратко отвечать на вопрос что такое в п.5.  можно ответить с ехидством -  "сейчас просто делай так, сынок, а поймешь - когда вырастешь" .

А если подробно - то начните знакомиться с моделью "сигнал-слот" коя является "одной из центральных фич" QT.
Там поймете и что такое цикл обработки событий (когда испущенные сигналы поочередно доставляются получателям-  слотам которые "прилинкованы" в этим слотам), и, думаю, почему нельзя без QApplication  и т.п.

И не пытайтесь проводить аналогий с WinApi. по сравнению с QT - WinApi пошлейшее уродство.
Это даже не сравнение "зергов и терран". "Зерги" и "терране" - одного уровня системы. QT и WinAPI - системы разного уровня.
QT - полноценная ООП-система. WinAPI - функциональный подход, и даже убогий в определенном смысле...

Это сообщение отредактировал(а) Denjs - 23.5.2009, 13:53
PM MAIL   Вверх
Любитель
Дата 23.5.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(Denjs @  23.5.2009,  13:40 Найти цитируемый пост)
Там поймете и что такое цикл обработки событий (когда испущенные сигналы поочередно доставляются получателям-  слотам которые "прилинкованы" в этим слотам)

Это emit сигнала - берётся список прилинкованных слотов и вызываются (через метаданные) слоты. QEventLoop нужен для другого. Но, действительно, на первых порах, пожалуй, это не так важно.


--------------------
PM MAIL ICQ Skype   Вверх
yngwie19
Дата 23.5.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Всем спасибо буду разбираться. Подскажите с какой книги лучше всего начать. И еще вопрос, говорят что Qt4 сильно отличается от Qt3, так ли это? И вообще скажите какое будущее у Qt
PM MAIL   Вверх
Remiznik
Дата 24.5.2009, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



в том и прелесть QT не нужно море книг чтоб разобраться документация написана достойно и понятно !
но так чтоб немного вникнут Шлее по любой из QT хватит для начал !! а дальше только документация !

будушее QT это уже 4,5 .... бери бесплатно и наслаждайся творчеством =)
PM MAIL   Вверх
Denjs
Дата 24.5.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Цитата(Любитель @ 23.5.2009,  20:56)
Это emit сигнала - берётся список прилинкованных слотов и вызываются (через метаданные) слоты. QEventLoop нужен для другого. 

гм.. а давайте пооффтопим? дабы восполнить мои пробелы в знаниях...

А для пересылки событий сежду процессами разве не нужен Event Loop? (не класс QEventLoop, а имеено "an event loop")
Технически, как я понимаю, в момент "app.exec();" запускается "цикл событий"(event loop) и в частности - начинают "доставляться" сигналы по соединениям созданным с типом "Qt::QueuedConnection" и/или сигналы направленные в объекты в других потоках.

Я так однажды инициировал объект - я "с дуру" написал его инициацию так, что мне зачам-то нужен был работающий цикл событий (деталей уже не могу вспомнить) и думал как мне его инициировать, потому что без него я вообще ничего не мог сделать в программе. В результате я создал класс пустышку StartEventSenter, далее в main() - создал его экземпляр, приконнектил его к нужному мне объекту с типом соединения "Qt::QueuedConnection" и "емитировал"(emit) сигнал.
Соответсвенно, до момента "app.exec()" ничто никуда не доставлялось.

или я где-то запутался с своих моделях?

Это сообщение отредактировал(а) Denjs - 24.5.2009, 17:03
PM MAIL   Вверх
Denjs
Дата 24.5.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Цитата(yngwie19 @ 23.5.2009,  22:58)
Всем спасибо буду разбираться. Подскажите с какой книги лучше всего начать. И еще вопрос, говорят что Qt4 сильно отличается от Qt3, так ли это?

начинать? читать Assistant) ну или читать Шлее или второе переиздание Бланшет. "НичоБольшеНет". 
Но помните - указанные книги - при всем своем объеме около 800+ страниц - это примерно 10-15% от данных что есть в родной справочной системе "assistant". Но и то и другое - это больше справочники, а не учебники. Зубрить -  не вызубрите, имхо.

и да, QT4 отличается от QT3. не кардинально, но сильно. Учите QT4. Последняя версия QT 4.5.

Это сообщение отредактировал(а) Denjs - 24.5.2009, 17:22
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.