我的代码中有什么错误?

时间:2010-02-18 14:54:56

标签: c++ qt qt4 symbian

下面提到的示例代码未编译。为什么呢?

#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();

}

尝试连接时给我一个问题。我想也许在主函数中编写连接代码是可以的。

4 个答案:

答案 0 :(得分:4)

QTimer在哪里?我认为这就是问题所在。我有一段时间没有做过Qt,但据我记得,connect的第一个和第三个参数是指向对象的指针,而你没有QTimer指针。

答案 1 :(得分:3)

总结以前的评论和答案:

  • 编译器告诉你至少它不理解的内容,如果没有直接说明你的代码有什么问题=&gt;如果你不明白编译器说什么用你的问题发布错误信息,那么它可以帮助那些说“compilese”的人
  • “connect”将对象的信号与另一个对象的插槽连接 - &gt;传递对象连接,而不是类
  • 连接对象必须存在连接的预期持续时间,您现在连接的最佳自动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;)

答案 2 :(得分:1)

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

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()));   
...

希望它有所帮助!

答案 3 :(得分:0)

不确定,但请尝试:

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

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