Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.42.163] |
|
Сообщ.
#1
,
|
|
|
Вот решил приобщиться к обществу программирующем с помощью QT, установил qt-win-opensource-4.3.2-mingw.exe скачанную с сайта троллей, скачал и установил MinGW.
Далее взял простенький код #include<QtDebug> #include<QCoreApplication> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); qDebug() << "Test"; return app.exec(); } и сделал так J:\Qt\4.3.2\bin>qtvars.bat Setting up a MinGW/Qt only environment... -- QTDIR set to j:\Qt\4.3.2 -- PATH set to j:\Qt\4.3.2\bin -- Adding J:\MinGW\bin to PATH -- Adding C:\WINDOWS\System32 to PATH -- QMAKESPEC set to win32-g++ J:\Qt\4.3.2\bin>cd J:\test J:\Test>qmake -project J:\Test>qmake J:\Test>make mingw32-make -f Makefile.Release mingw32-make[1]: Entering directory `J:/Test' g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS _QMAIN -I"..\Qt\4.3.2\include\QtCore" -I"..\Qt\4.3.2\include\QtCore" -I"..\Qt\4. 3.2\include\QtGui" -I"..\Qt\4.3.2\include\QtGui" -I"..\Qt\4.3.2\include" -I"." - I"j:\Qt\4.3.2\include\ActiveQt" -I"release" -I"." -I"..\Qt\4.3.2\mkspecs\win32-g ++" -o release\test.o test.cpp g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel oc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o "release\Test.exe" release\tes t.o -L"j:\Qt\4.3.2\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4 mingw32-make[1]: Leaving directory `J:/Test' То есть все скомпилировалось нормально, как я понял, но к своему стыду теперь незнаю как запустить полученный екзешник. Вернее как запустить его так, чтобы увидеть вывод функции qDebug() . Запустил из консоли test.exe , никакого эффекта, причем процесс test.exe висит и не завершается. Подскажите что и как, может что не так делаю, раньше работал только с Visual Studio там с таким естественно не сталкивался. |
Сообщ.
#2
,
|
|
|
qDebug() - это функция.
Поэтому перегруженного оператора << быть не может. Поэтому qDebug("Test"); |
Сообщ.
#3
,
|
|
|
Из QT Assistant
Цитата void qDebug ( const char * msg, ... ) Calls the message handler with the debug message msg. If no message handler has been installed, the message is printed to stderr. Under Windows, the message is sent to the debugger. This function does nothing if QT_NO_DEBUG_OUTPUT was defined during compilation. If you pass the function a format string and a list of arguments, it works in similar way to the C printf() function. Example: qDebug("Items in list: %d", myList.size()); If you include <QtDebug>, a more convenient syntax is also available: qDebug() << "Brush:" << myQBrush << "Other value:" << i; This syntax automatically puts a single space between each item, and outputs a newline at the end. It supports many C++ and Qt types. Warning: The internal buffer is limited to 8192 bytes, including the '\0'-terminator. |
Сообщ.
#4
,
|
|
|
все правильно у тебя написано.
тебе нужно перехватывать вывод отладочной инфы. Что бы ее перехватывать нужно запускать все под отладчиком либо использовать QtMsgHandler qInstallMsgHandler ( QtMsgHandler handler ) |
Сообщ.
#5
,
|
|
|
Но там написано, что если message handler не установлен то вывод в stderr а это в винде по умолчанию консоль. Разве не так?
Кстати почему файл приложения после запуска висит в процессах и не закрывается? Это работа функции app.exec() ? В консольном приложении ведь нет цикла сообщений. |
Сообщ.
#6
,
|
|
|
Цитата Dmitrys @ Кстати почему файл приложения после запуска висит в процессах и не закрывается? Это работа функции app.exec() ? В консольном приложении ведь нет цикла сообщений. да, это из-за app.exec() и в консольных приложениях есть обработка сообщений. Кстати учитываи, что тут не винда и идеология обработки сообщений немного другая. |
Сообщ.
#7
,
|
|
|
Спасибо, все получилось, нехватало CONFIG += console в pro файле.
Цитата Кстати учитываи, что тут не винда и идеология обработки сообщений немного другая. Можете подсказать насколько она другая? |
Сообщ.
#8
,
|
|
|
такие фундаментальные вопросы как "что такое обработка событий" нужно в книжках читать:
http://www.mechta34.com/it/qt4/ Необходимость запуска обработчика событий определяется не наличием окон, а использованием механизма сигналов и слотов. |
Сообщ.
#9
,
|
|
|
Цитата sploid @ такие фундаментальные вопросы как "что такое обработка событий" нужно в книжках читать: http://www.mechta34.com/it/qt4/ Необходимость запуска обработчика событий определяется не наличием окон, а использованием механизма сигналов и слотов. Что такое обработка событий я знаю, и книжки я не гнушаюсь читать. Меня заинтересовал ваша реплика Цитата ... учитывай, что тут не винда и идеология обработки сообщений немного другая. интересно что именно другое в этой "идеологии", и насколько другое. |
Сообщ.
#10
,
|
|
|
у меня было два знакомых, которые считали что "чем толще книга, тем она хуже", я ошибочно предположил что Вы из числа подобных людей и пытаетесь заменить форум прочтением книг.
Когда я сказал "... учитывай, что тут не винда и идеология обработки сообщений немного другая.", то это было в контексте Вашего вопроса "И еще вопрос, зачем нужен в данном коде app.exec() ? Как я понял это запуск цикла обработки сообщений, а в обычном консольном приложении он нам не нужен.". Я имел в виду что сигналы и слоты объединяют объекты и неважно консольное это приложение или нет, однако в винде сообщениями обмениваются окна и соответственно сообщения нужны только если есть окна ( за редким исключением ). Например если Вы используете QTcpSocket в консольном приложении, то для обработки сигналов состояния сокета, нужно будет запустить обработчик событий. |
Сообщ.
#11
,
|
|
|
sploid спасибо за ответ, впринципе это я уже нашел сам (поэтому и зачеркнул предложение) но все равно спасибо, хорошая помощь никогда не помешает.
|