Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при выполнении MOC. Новичок я в QT, использую VS2008. 
V
    Опции темы
Fighter
Дата 29.1.2011, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Исходная задача:
Есть QT 4.6.2.
Среда разработки - Visual Studio. 
С сайта скачал и SDK и Visual Studio Add-in. 
Далее, из книжки Макса Шлее написал примерчик:
Код

#include "qtapp.h"
#include <QtGui/QApplication>
#include <QtGui/QLabel>
#include <QtGui>
#include <QtCore>

class MySignal {
    Q_OBJECT
public:
    void sendSignal()
    {
        emit DoIt();
    }
    void sendSignal2()
    {
        emit SendString("Hello man");
    }

signals:
    void DoIt();
    void SendString(const QString&);
};


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qtApp q = new qtApp();
    q.show();
    

    return a.exec();
}



При компиляции выдает ошибку: Error    1    error PRJ0019: A tool returned an error code from "Moc'ing main.moc..."    qtApp    qtApp


Не знаю что делать. может быть автоматической установки мало для полной настройки VS???
PM MAIL   Вверх
Modul
Дата 29.1.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пример работы с сигналом и слотом.

My.h
Код

#ifndef _My_h_
#define _My_h_

#include <QObject>


class My : public QObject 
{ 
    Q_OBJECT
    

public slots: 
      void run();

public:    
    signals: 
      void process(int);

};

#endif //_My_h_


My.cpp
Код

#include "My.h"

void My::run() 
{ 
            
    int res = 123;

    // Подает сигнал
    if (res) emit process(res);
}


main.cpp
Код

#include <QApplication>
#include <QtGui>
#include "My.h"


int main(int argc, char** argv) 
{ 
    QApplication app(argc, argv);

    QWidget wgt;    
    // мой объект
    My my; 

    // метка
    QLabel label("Label");
    // кнопка
    QPushButton pushButton("Run");

    // нажали кнопку, приняли сигнал
    QObject::connect(&pushButton, SIGNAL(clicked() ), &my, SLOT(run() ));        
    QObject::connect(&my, SIGNAL( process(int) ), &label, SLOT( setNum(int) ));    
    
    // вертик. менеджер 
    QVBoxLayout verLayout; 
    verLayout.addWidget(&label); 
    verLayout.addWidget(&pushButton);    
    wgt.setLayout(&verLayout);
    wgt.show(); 
 
    return app.exec(); 
}


--------------------
I'll be back !
PM MAIL   Вверх
alexvs11
Дата 29.1.2011, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



Fighter, все классы работающие с сигналами/слотами должны быть описаны в отдельном .h файле/определены в отдельном .cpp
PM MAIL   Вверх
Fighter
Дата 29.1.2011, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alexvs11 @ 29.1.2011,  17:32)
Fighter, все классы работающие с сигналами/слотами должны быть описаны в отдельном .h файле/определены в отдельном .cpp

1. У меня все заработало после переустановки QT. Я скачал самую новую на данный момент QT 4.7.1 и все соответствующие ей компоненты. В результате у меня все замечательно работает и в QT Creator, VS2008 и в VS2010. 
2. Разбиение на *.h и *.cpp файлы - это не обязательное условие языка С++ вообще, и библиотеки QT применительно к слотам и сигналам в частности. Разбиение на файлы сделано исключительно для удобства программиста. Всю программу можно написать и в одном файле. Все равно, когда запускается процесс сборки сначала препроцессор создает конечные файлы для компиляции, например, выполняя команды #include - именно включая содержимое хедеров в cpp. Кроме этого, в QT в частности метаобъектный компилятор обрабатывает макросы Q_OBJECT и многие другие. В конечном итоге сам компилятор компилирует как будто ты писал все в одном большом файле. Да и действительно, любую программу можно написать в одном CPP файле, просто разбираться в ней будет сложно. 

В общем, проблема решена, спасибо всем)))
PM MAIL   Вверх
alexvs11
Дата 29.1.2011, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



Fighter, спасибо,  все знают, что для с++ это не обязательно, но moc-компилятор может не справиться  smile 
PM MAIL   Вверх
Fighter
Дата 30.1.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alexvs11 @ 29.1.2011,  20:07)
Fighter, спасибо,  все знают, что для с++ это не обязательно, но moc-компилятор может не справиться  smile

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

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

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


 




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


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

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