Название: Прошу помочь Отправлено: stud от Март 02, 2015, 19:12 Коллеги, день добрый.
Сам на С++ не пишу, но вот подкинули задачу на плюсах с QT, приходится разбираться. Задача простая, скачать файлы на диск из сети. (нашел кучу примеров, в том числе и на русском, но не понимаю пары вещей). Хидер Код: class Test_class cpp файл Код: Test_class::Test_class() Ругается на строчку, QObject::connect(netman, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*))); Вопросов 2: 1. Откуда брать QObject 2. Что в данном контексте this будет. Название: Re: Прошу помочь Отправлено: torwig от Март 02, 2015, 19:22 1. Чтобы использовать сигналы и слоты (что у Вас используется) нужно отнаследоваться от QObject и написать макрос Q_OBJECT:
Цитировать #include <QObject> class Test_class: public QObject { Q_OBJECT public: Test_class::Test_class(); ~Test_class(); public slots: void replyFinished(QNetworkReply*); // тот самый слот, который вы подключаете к сигналу finished }; 2. this будет у Вас экземпляр класса Test_class. Название: Re: Прошу помочь Отправлено: stud от Март 02, 2015, 19:45 Спасибо, тебе милый человек, дело сдвинулось. Видел такой код в примере, не понимал, что он делает.
Теперь код выглядит так: .h файл Код: #pragma once cpp файл: Код: #include "Test_class.h" Остались ошибки линковщика: Ошибка 2 error LNK2001: неразрешенный внешний символ ""public: virtual struct QMetaObject const * __cdecl Test_class::metaObject(void)const " (?metaObject@Test_class@@UEBAPEBUQMetaObject@@XZ)" Ошибка 3 error LNK2001: неразрешенный внешний символ ""public: virtual void * __cdecl Test_class::qt_metacast(char const *)" (?qt_metacast@Test_class@@UEAAPEAXPEBD@Z)" D:\Стол\Виджет для Test_class\HelloWorldExample\Test_class.obj В какую сторону копать? Название: Re: Прошу помочь Отправлено: ammaximus от Март 02, 2015, 19:48 Когда написал макрос нужно вызвать команду qmake
Название: Re: Прошу помочь Отправлено: ammaximus от Март 02, 2015, 19:49 И никаких русских имен в названии каталогов под виндой!!!
Название: Re: Прошу помочь Отправлено: stud от Март 02, 2015, 19:56 И никаких русских имен в названии каталогов под виндой!!! Шел 2015 год :). Переименовал папку.Когда написал макрос нужно вызвать команду qmake Не смотря на то, что я в Visual Studio проект пишу?Название: Re: Прошу помочь Отправлено: ammaximus от Март 02, 2015, 20:07 Про студию сказать точно не могу, но ручной ввод маросов не вызывает кмак. Автомат реагирует только на команды создания, в лучшем случае рефакторинг. Ручной кмак незаменим.
У винды вечные проблемы с переходом на юникод, а почему кютешные модули не работают в ее кодировке сказать не могу. Название: Re: Прошу помочь Отправлено: RSATom от Март 03, 2015, 07:52 Для использования Qt со студией нужно либо пользоваться Qt Visual Studio AddIn (http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.4-opensource.exe) либо использовать cmake. Первое проще.
Название: Re: Прошу помочь Отправлено: Day от Март 03, 2015, 09:01 ИМХО, нужно еще в pro-файл добавить HEADERS += твой хедер с Q_OBJECT
Только после этого qmake Название: Re: Прошу помочь Отправлено: stud от Март 03, 2015, 13:04 Ребят, я может сейчас глупость скажу, но смотрите, мне дали проект, в котором был файл .pro, для разработки в Visual Studio было необходимо выполнить qmake -tp vc <project file>, были созданы файлы для работы в студии. Открыл в студии и начал дописывать то, что мне нужно. Теперь вопрос, что в итоге делает qmake, чего нельзя сделать в студии? qmake ругается на QMAKESPEC has not been set.
Результат пока следующий, если закоментить в хидере Q_OBJECT, то проект компилируется и при выполнении не видит слот, что видимо верно. Object::connect: No such slot QObject::replyFinished(QNetworkReply*) Название: Re: Прошу помочь Отправлено: RSATom от Март 03, 2015, 13:18 Qt Visual Studio Add-In стоит? если да то он позволяет делать .pro файл на основе текущего Visual Studio проекта.
Название: Re: Прошу помочь Отправлено: stud от Март 03, 2015, 13:23 Qt Visual Studio Add-In стоит? если да то он позволяет делать .pro файл на основе текущего Visual Studio проекта. Оно?http://download.qt.io/official_releases/vsaddin/ Сейчас скачаю, поставлю, попробую. Скачал, попробовал поставить, ругается, что Visual C++ Express is not supported, пошел искать дальше. Название: Re: Прошу помочь Отправлено: RSATom от Март 03, 2015, 14:58 А какой смысл в нынешнее время использовать Visual Studio Express, когда есть Visual Studio Community 2013 (искать тут (http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx))? Если же по каким либо причинам использовать Community Edition возможности нет, то уж лучше тогда QtCreator. т.к. использование VS Express в связке с Qt попахивает мазохизмом. А новичка вообще может привести к трудно понимаемым проблемам...
Название: Re: Прошу помочь Отправлено: stud от Март 03, 2015, 15:15 А какой смысл в нынешнее время использовать Visual Studio Express, когда есть Visual Studio Community 2013 (искать тут (http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx))? Если же по каким либо причинам использовать Community Edition возможности нет, то уж лучше тогда QtCreator. т.к. использование VS Express в связке с Qt попахивает мазохизмом. А новичка вообще может привести к трудно понимаемым проблемам... Спасибо за ответ, но требования платформы использовать Visual Studio 2012, не спрашивайте почему так, но прямо в SDK указано:C++ To compile C++ code in SDK Visual Studio 2012 compiler is required. It is not possible to use older versions of Visual Studio because of the C++11 language features that are used in Cornerstone. It is possible to use the Visual Studio 2012 Express for Windows Desktop available from http://www.microsoft.com/visualstudio/eng/downloads. Попробую сейчас рядом еще студию поставить 2013, но по-моему там есть проблемы. Еще добавлю, что QT в чистом виде не ставилось, ставилось только SDK. По теме, как я понял проблема с moc файлом - он не формируется. Попробовал вручную сделать что-то типа moc.exe Test_class.moc Test_class.cpp получил No relevant classes found. Название: Re: Прошу помочь Отправлено: Bepec от Март 03, 2015, 15:54 Qt не бачит с Express версиями. Или 2012 цельную ставьте, или тупо компилятор используйте.
Проблема скорее надуманная, чем реальная на мой взгляд. PS Qt это и есть SDK. Не путайте Qt(библиотеки) и Qt creator(ide под библиотеки) :) Название: Re: Прошу помочь Отправлено: stud от Март 03, 2015, 16:06 Qt не бачит с Express версиями. Или 2012 цельную ставьте, или тупо компилятор используйте. Visual Studio Community 2013 - считается цельной или это тоже урезанная? Попробую ее поставить?Проблема скорее надуманная, чем реальная на мой взгляд. PS Qt это и есть SDK. Не путайте Qt(библиотеки) и Qt creator(ide под библиотеки) :) А что вы имеете в виду под "тупо компилятор используйте"? qmake вручную вызвать? Я же писал, что пробовал, ругается на QMAKESPEC has not been set. попробовал с опциями, та же петрушка. Название: Re: Прошу помочь Отправлено: ibnz от Март 03, 2015, 16:35 http://doc.crossplatform.ru/qt/4.3.5/qmake-environment-reference.html
Название: Re: Прошу помочь Отправлено: Bepec от Март 03, 2015, 17:08 Если нет надписи Express, то работает :)
Ну значит у вас неправильный про файл к примеру. Напрямую - это вызвать nmake по VS файлу проекта, который создан с помощью QMake вроде бы :) Название: Re: Прошу помочь Отправлено: RSATom от Март 03, 2015, 19:42 Спасибо за ответ, но требования платформы использовать Visual Studio 2012, не спрашивайте почему так, но прямо в SDK указано: О каком SDK идет речь? Какую версию Qt вы используете? Если поставить Visual Studio Express 2012, а затем Visual Studio Comuntiy 2013 - есть подозрение что в этом случае в 2013 студии можно будет выбрать тулкит из 2012-ой (если уж так сильно нужен компилятор из 12-ой студии). |