如何在不同的文件中创建类

How can I create my class in different file?

本文关键字:文件 创建      更新时间:2023-10-16

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

这是我的代码,但它是错误编译的。我应该把我的课放在另一个文件里(.h)。但是我不知道怎么做。。

我的软件是qtcreator 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();
}

您应该创建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);
    }
 }    

现在继续你的主.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网页上找到更多。

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

将类定义放在.h文件中:

计数器.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,因此必须运行作为Qt发行版一部分的moc编译器来创建另一个.cpp文件。编译所有.cpp文件。然后,链接对象文件以创建可执行文件。