如何在不同的文件中创建类
How can I create my class in different file?
有人能告诉我如何为我的计数器类制作不同的文件吗?
这是我的代码,但它是错误编译的。我应该把我的课放在另一个文件里(.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文件。然后,链接对象文件以创建可执行文件。
相关文章:
- 终端不会为C++文件创建.exe文件吗
- 如何从具有两列的.txt文件创建并行数组?
- 从 .lib 文件创建一个.dll文件
- 如何从输入文件 c++ 创建随机名称生成器
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- 如何为多个目录中的多个文件创建生成文件?
- 在编译时从 c++ 文件创建枚举
- 如何在运行时从 c++ 中的 DLL 文件创建对象?
- 文件创建并不总是成功
- 如何使用 QFile、c++ 从文件创建整数数组
- 您可以使用 makefile 从 .o 对象文件创建 C++ 文件吗?
- 从函数中的dat文件创建一个2维数组
- 如何为 cpp 和 h 文件创建别名(并忽略编译器__attributes__)
- 如何从现有的生成文件创建 CMake 文件?
- 为什么我无法使用文本文件创建文件映射?
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 从文本文件创建 2D 字符串矢量
- ofStream: - 尽管文件创建了,但文本文件上没有输出
- 从语言文件创建JSON对象
- 将文本文件创建到节点.js的插件C++