Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Программа "Hello Qt"


Автор: yngwie19 22.5.2009, 13:21
Здравсвуйте. Закончив изучение 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 то по другому она работать не может. 
 

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

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

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

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

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

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

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

Автор: yngwie19 22.5.2009, 15:02
kemiisto, Ясно, ну ладно спасибо что предупредили, все-таки объясните смысл п.5  smile 

Автор: kuzulis 22.5.2009, 15:20
читать (хотябы) : 
"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.
...
...

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

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

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

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

Автор: Любитель 22.5.2009, 16:45
Посмотри документацию в ассистенте. ДУмаю станет понятней (по методам класса).

Автор: Denjs 23.5.2009, 13:40
Цитата(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 - функциональный подход, и даже убогий в определенном смысле...

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

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

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

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

будушее QT это уже 4,5 .... бери бесплатно и наслаждайся творчеством =)

Автор: Denjs 24.5.2009, 17:02
Цитата(Любитель @ 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:21
Цитата(yngwie19 @ 23.5.2009,  22:58)
Всем спасибо буду разбираться. Подскажите с какой книги лучше всего начать. И еще вопрос, говорят что Qt4 сильно отличается от Qt3, так ли это?

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

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

Автор: Любитель 24.5.2009, 18:32
Цитата(Denjs @  24.5.2009,  17:02 Найти цитируемый пост)
начинают "доставляться" сигналы по соединениям созданным с типом "Qt::QueuedConnection" и/или сигналы направленные в объекты в других потоках.

Для работы очередей сигналов само собой используется внутренне QEventLoop. Абсолютно верно.

Цитата(Denjs @  24.5.2009,  17:02 Найти цитируемый пост)
А для пересылки событий сежду процессами разве не нужен Event Loop? (не класс QEventLoop, а имеено "an event loop")

QEventLoop это и есть абстракции над различными (ОС-зависимыми) реализациями ивент-цикла.

app.exec - это практически просто обёртка над вызовом exec внутреннего инстанса QEventLoop. Но, кроме того, QApplication хранит, скажем, имя приложения, организацию и пр. Что тоже кое-где (QSettings тот же) используется..

Автор: pan2004 25.5.2009, 16:16
Цитата(Denjs @  24.5.2009,  17:21 Найти цитируемый пост)
Но помните - указанные книги - при всем своем объеме около 800+ страниц - это примерно 10-15% от данных что есть в родной справочной системе "assistant".

Кроме того, эти книги постепенно устаревают по мере того, как Qt все более развивается. По скорости развития она вполне может превзойти .Net, и упоминаний о новых фичах(QWebKit, phonon, QScript, QXmlPatterns, да даже Graphics View) вы в книгах не встретите. Рано или поздно, причем скорее рано - привыкайте читать по англицки smile .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)