有人可以告诉我如何为我的计数器类制作不同的文件吗?
这是我的代码,但它是由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 :(得分: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网页上找到更多信息。