下面提到的示例代码未编译。为什么呢?
#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();
}
尝试连接时给我一个问题。我想也许在主函数中编写连接代码是可以的。
答案 0 :(得分:4)
QTimer
在哪里?我认为这就是问题所在。我有一段时间没有做过Qt,但据我记得,connect
的第一个和第三个参数是指向对象的指针,而你没有QTimer
指针。
答案 1 :(得分:3)
总结以前的评论和答案:
正确的方法:
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
作为第三个。