如何在不同的文件中创建我的课程?

时间:2014-11-08 07:11:14

标签: c++ qt

有人可以告诉我如何为我的计数器类制作不同的文件吗?

这是我的代码,但它是由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();
}

3 个答案:

答案 0 :(得分:0)

类声明应该在Counter.h中。 Counter :: setValue方法应该进入Counter.C. Counter.C和包含main的文件都应包含Counter.h。

答案 1 :(得分: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文件。然后,链接目标文件以创建可执行文件。

答案 2 :(得分: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网页上找到更多信息。