Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Zilibobas от Декабрь 09, 2014, 19:57



Название: Ругается на строчку с emit
Отправлено: Zilibobas от Декабрь 09, 2014, 19:57
Код:
#ifndef MAIN_H
#define MAIN_H

class cCounter : public QObject
{
   Q_OBJECT
   public:
     cCounter() { m_value = 0; }
     int value() const { return m_value; }
   public slots:
     void setValue(int value);
   signals:
     void valueChanged(int newValue);
   private:
     int m_value;
};

#endif // MAIN_H

Код:
#include <QApplication>
#include <QQmlApplicationEngine>

#include <QObject>
//#include <QCryptographicHash>

#include "main.h"

void cCounter::setValue(int value)
{
   if (value != m_value) {
     m_value = value;
     emit valueChanged(value);
   }
}

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

    //cCounter a, b;
    //QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

если закоменить посыл сигнала "emit valueChanged(value);" все компилится, еслин е комментить пишет ошибку:
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl cCounter::valueChanged(int)" (?valueChanged@cCounter@@QEAAXH@Z) в функции "public: void __cdecl cCounter::setValue(int)" (?setValue@cCounter@@QEAAXH@Z)

уже не знаю что делать вообще.


Название: Re: Ругается на строчку с emit
Отправлено: gil9red от Декабрь 09, 2014, 21:08
Перенести этот код в отдельный cpp файл
Код
C++ (Qt)
#include "main.h"
 
void cCounter::setValue(int value)
{
  if (value != m_value) {
    m_value = value;
    emit valueChanged(value);
  }
}
 

 :)


Название: Re: Ругается на строчку с emit
Отправлено: vbv от Декабрь 09, 2014, 21:16
1. Выполнить, если не выполнен qmake.
2. Сделать переменную в сигнале const.