2014-11-08 54 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

它对我很有用,很喜欢;) – 2014-11-08 11:48:51

相关问题