当前位置:编程学习 > wap >>

qt出现多重定义问题

本人小菜一个最近学qt,用qt creator,出现一个问题
头文件内容:

#ifndef TEST_H
#define TEST_H
#include<iostream>
#include<QApplication>
class Test :public QObject
{
    Q_OBJECT

    public: void setValue(int newvalue);
    public slots: void show();
    signals: void valuechange();
    private : int value;
};
void Test::setValue(int newvalue) //有这条说我重定义,删了又说没有定义……而且第一次定义是在qglobal.h里面
{
    value = 7;
    emit valuechange();
}
void Test::show()                  //同上,不过第一次定义指的是这里……我晕了
{
    std::cout<<"Connected succeed.\n Value changed " + value<<std::endl;
}
#endif // TEST_H

cpp内容:

#include<Test.h>
int main()
{
    Test t;
    QObject::connect(&t,SIGNAL(valuechange()),&t,SLOT(show()));
    t.setValue(7);
    return 0;
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 自己写的函数不要采用和qt相同的命名方式,换个函数名就行了,不然你有可能重载了一些重要的函数。 --------------------编程问答-------------------- --------------------编程问答-------------------- 继承自QObject,那么要把函数定义放在.cpp文件里,不能放在.h文件里,因为,另外你的main函数也需要改下

#include <mainwindow.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Test t;
    QObject::connect(&t,SIGNAL(valuechange()),&t,SLOT(show()));
    t.setValue(7);
    return a.exec();
}


至于为什么 楼下的大牛解释吧 我解释不清楚 --------------------编程问答-------------------- 给你贴一下改了的代码吧
Test.h:

#ifndef TEST_H
#define TEST_H
#include<iostream>
#include<QApplication>
class Test :public QObject
{
    Q_OBJECT

    public:
    void setValue(int newvalue);
    public slots:
    void show();
    signals:
    void valuechange();
    private :
    int value;
};

#endif // TEST_H


Test.cpp:

#include <Test.h>

void Test::setValue(int newvalue) //有这条说我重定义,删了又说没有定义……而且第一次定义是在qglobal.h里面
{
    value = 7;
    emit valuechange();
}
void Test::show()                  //同上,不过第一次定义指的是这里……我晕了
{
    std::cout<<"Connected succeed.\n Value changed " + value<<std::endl;
}



main.cpp:

#include <Test.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Test t;
    QObject::connect(&t,SIGNAL(valuechange()),&t,SLOT(show()));
    t.setValue(7);
    return a.exec();
}


把函数放在cpp文件中,是因为牵扯到moc_*.cpp文件的生成…… --------------------编程问答--------------------
引用 5 楼 wangxkww 的回复:
给你贴一下改了的代码吧
Test.h:
C/C++ code

#ifndef TEST_H
#define TEST_H
#include<iostream>
#include<QApplication>
class Test :public QObject
{
    Q_OBJECT

    public:
    void setValue(int newvalue);
    ……

顶楼上的
只要用到了Q_OBJECT 
类的声明(.h)和实现(.cpp)就要分开来写。
要不然MOC没法工作。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,