2010-02-18 99 views
-2

下面提到的示例代码不在编译中。为什么?我的代码中有什么错误?

#include "QprogressBar.h" 

#include <QtGui> 
#include <QApplication> 
#include<qprogressbar.h> 
#include <qobject.h> 

lass myTimer: public QTimer 
{ 

public: 
    myTimer(QWidget *parent=0):QTimer(parent) 
{} 

public slots: 
void recivetime(); 
}; 
void myTimer::recivetime() 
    { 

    } 

class Progressbar: public QProgressDialog 
    { 
public: 
    Progressbar(QWidget *parent=0):QProgressDialog(parent) 
      { 

      } 


    }; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 


QObject::connect(QTimer,SIGNAL(timeout()),QTimer,SLOT(recivetime())); 


return a.exec(); 

} 

它试图连接时给我一个问题。我认为在主函数中编写连接代码也可以。

+7

你能告诉我们这个错误吗?另外,你有'lass'而不是'class' – GManNickG

+5

我们可以看到编译器的输出吗? – samoz

+0

这个问题家族在http://meta.stackexchange.com/questions/40164/should-we-close-fix-my-program-questions上进行了讨论。尽管讨论中至少存在语义问题,而不是语法/键入问题。 –

回答

3

综上所述,比前意见和答案:

  • 编译器会告诉你至少是如果不是直线上升什么是你的代码错误=>如果你不明白不明白什么编译器说,发布错误信息与您的问题,以便它可以帮助那些说“编译”的人连接一个对象的信号与另一个对象的插槽 - >传递对象连接,而不是类
  • 连接的对象必须在您连接的预期持续时间内存在,最多只能连接自动实例的QTimer将在连接通话结束时超出范围。

这样做的正确方法:

int main(int argc, char *argv[]) 
    { 
     QApplication a(argc, argv); 

     myTimer myTimerObject(a); 

     QObject::connect(&myTimerObject, SIGNAL(timeout()), &myTimerObject, SLOT(recivetime())); 

     return a.exec(); 

    } 

作为一个侧面说明这无关与Symbian,也不是特定于Qt的4.x版另外Qt不是QT就像QT不是Qt;)

4

您的QTimer在哪里?我认为这是问题。我有一段时间没有完成Qt,但据我所知,connect的第一个和第三个参数是指向对象的指针,而您没有QTimer指针。

+0

是的男人你是对的.. 我做了什么愚蠢的错误:( – Naruto

0

不知道,但尝试:

QObject::connect(myTimer,SIGNAL(timeout()),this,SLOT(recivetime())); 

哎呀,还以为是myTimer的QTimer的实例,而不是一个子类。创建一个QTimer的实例并将其作为第一个参数。第三名为this

+0

主要没有'this',以免我误解。 – GManNickG

1

Skilldrick是对的!
请参阅qt文档on signals and slots。 连接方法需要发送者和接收者对象的指针或引用!
但在你的代码:

QObject::connect(QTimer,SIGNAL(timeout()),QTimer,SLOT(recivetime())); 

QTimer是一个类的名字,而不是这个类的一个对象! 我的意思是,你需要创建一个对象。例如:

QTimer* pTimer = new QTimer(a); // QTimer object 
myTimer* pReciever = new myTimer(a); // Your custom QTimer object with progress bar 
QObject::connect(pTimer,SIGNAL(timeout()), pReciever,SLOT(recivetime())); 
... 

希望它有帮助!