2010-02-18 115 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())); 
... 

希望它有幫助!