На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> первое QT приложение
    Вот решил приобщиться к обществу программирующем с помощью QT, установил qt-win-opensource-4.3.2-mingw.exe скачанную с сайта троллей, скачал и установил MinGW.
    Далее взял простенький код
    ExpandedWrap disabled
      #include<QtDebug>
      #include<QCoreApplication>
       
      int main(int argc, char *argv[])
      {
          QCoreApplication app(argc, argv);
          qDebug() << "Test";
              
          return app.exec();
      }


    и сделал так
    ExpandedWrap disabled
      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 там с таким естественно не сталкивался.
      qDebug() - это функция.
      Поэтому перегруженного оператора << быть не может.
      Поэтому qDebug("Test");
        Из 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.
          все правильно у тебя написано.
          тебе нужно перехватывать вывод отладочной инфы. Что бы ее перехватывать нужно запускать все под отладчиком либо использовать
          ExpandedWrap disabled
            QtMsgHandler qInstallMsgHandler ( QtMsgHandler handler )
            Но там написано, что если message handler не установлен то вывод в stderr а это в винде по умолчанию консоль. Разве не так?

            Кстати почему файл приложения после запуска висит в процессах и не закрывается? Это работа функции app.exec() ? В консольном приложении ведь нет цикла сообщений. :wacko:
            Сообщение отредактировано: Dmitrys -
              Цитата Dmitrys @
              Кстати почему файл приложения после запуска висит в процессах и не закрывается? Это работа функции app.exec() ? В консольном приложении ведь нет цикла сообщений. :wacko:

              да, это из-за app.exec() и в консольных приложениях есть обработка сообщений. Кстати учитываи, что тут не винда и идеология обработки сообщений немного другая.
                Спасибо, все получилось, нехватало CONFIG += console в pro файле.
                Цитата
                Кстати учитываи, что тут не винда и идеология обработки сообщений немного другая.

                Можете подсказать насколько она другая?

                И еще вопрос, зачем нужен в данном коде app.exec() ? Как я понял это запуск цикла обработки сообщений, а в обычном консольном приложении он нам не нужен.
                Сообщение отредактировано: Dmitrys -
                  такие фундаментальные вопросы как "что такое обработка событий" нужно в книжках читать:
                  http://www.mechta34.com/it/qt4/

                  Необходимость запуска обработчика событий определяется не наличием окон, а использованием механизма сигналов и слотов.
                    Цитата sploid @
                    такие фундаментальные вопросы как "что такое обработка событий" нужно в книжках читать:
                    http://www.mechta34.com/it/qt4/

                    Необходимость запуска обработчика событий определяется не наличием окон, а использованием механизма сигналов и слотов.

                    Что такое обработка событий я знаю, и книжки я не гнушаюсь читать. :angry:

                    Меня заинтересовал ваша реплика
                    Цитата

                    ... учитывай, что тут не винда и идеология обработки сообщений немного другая.

                    интересно что именно другое в этой "идеологии", и насколько другое.
                      у меня было два знакомых, которые считали что "чем толще книга, тем она хуже", я ошибочно предположил что Вы из числа подобных людей и пытаетесь заменить форум прочтением книг.

                      Когда я сказал "... учитывай, что тут не винда и идеология обработки сообщений немного другая.", то это было в контексте Вашего вопроса "И еще вопрос, зачем нужен в данном коде app.exec() ? Как я понял это запуск цикла обработки сообщений, а в обычном консольном приложении он нам не нужен.". Я имел в виду что сигналы и слоты объединяют объекты и неважно консольное это приложение или нет, однако в винде сообщениями обмениваются окна и соответственно сообщения нужны только если есть окна ( за редким исключением ).

                      Например если Вы используете QTcpSocket в консольном приложении, то для обработки сигналов состояния сокета, нужно будет запустить обработчик событий.
                        sploid спасибо за ответ, впринципе это я уже нашел сам (поэтому и зачеркнул предложение) но все равно спасибо, хорошая помощь никогда не помешает.
                        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0344 ]   [ 15 queries used ]   [ Generated: 20.05.24, 11:16 GMT ]