2014-11-08 4 views
0

может кто-нибудь сказать мне, как я могу сделать другой файл для моего счетного класса?Как создать класс в другом файле?

это мой код, но он составлен error.I должен поставить свой класс в другой файл (.h) .Но я не знаю, как это сделать ..

Мой программное обеспечение Qt Creator 5

#include <QCoreApplication> 
#include <QObject> 

class Counter : public QObject 
{ 
    Q_OBJECT 
    int m_value; 
public: 
    int value() const { return m_value; } 
public slots: 
    void setValue(int value); 
signals: 
    void valueChanged(int newValue); 
}; 
void Counter::setValue(int value) 
{ 
    if (value != m_value) 
    { 
     m_value = value; 
     emit valueChanged(value); 
    } 
} 
int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    Counter d, b; 
     QObject::connect(&d, SIGNAL(valueChanged(int)), 
         &b, SLOT(setValue(int))); 

    d.setValue(12); // a.value() == 12, b.value() == 12 

    return a.exec(); 
} 

ответ

0

Вы должны создать Counter.h, который записывается в виде следующих параметров:

#include <QObject> 

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

Затем поместите следующий код в Couter.cpp

#include "Counter.h" 

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

Теперь продолжайте с main.c

#include <QCoreApplication> 
#include "Couter.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    Counter d, b; 
    QObject::connect(&d, SIGNAL(valueChanged(int)), 
       &b, SLOT(setValue(int))); 

    d.setValue(12); // a.value() == 12, b.value() == 12 

    return a.exec(); 
}  

Я не уверен, что вы используете qmake для сборки. Если это так, вам нужно добавить два имени файла: Couter.h и Counter.cpp в YourProjName.pro, например Counter.pro.

Вы должны найти больше на веб-странице Qt.

0

Декларация класса должна идти в Counter.h. Метод Counter :: setValue должен идти в Counter.C. И Counter.C, и файл, который содержит main, должны включать Counter.h.

0

Поместите определение класса в файле .h:

Counter.h

#pragma once 

#include <QCoreApplication> 
#include <QObject> 

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

Помещенный определения функций-членов в файле .cpp.

Counter.cpp:

#include "Counter.h" 

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

Поместите функцию main в другом файле .cpp.

TestCounter.cpp:

#include "Counter.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    Counter d, b; 
     QObject::connect(&d, SIGNAL(valueChanged(int)), 
         &b, SLOT(setValue(int))); 

    d.setValue(12); // a.value() == 12, b.value() == 12 

    return a.exec(); 
} 

Поскольку ваш класс, производный от QObject, вы должны запустить moc компилятора, часть дистрибутива Qt, чтобы создать еще один .cpp файла. Скомпилируйте все .cpp-файлы. Затем свяжите объектные файлы с целью создания исполняемого файла.

+0

это было так полезно для меня, большое как;) –

Смежные вопросы