В чем ошибка в моем коде? - PullRequest
       15

В чем ошибка в моем коде?

0 голосов
/ 18 февраля 2010

Пример кода, упомянутый ниже, не компилируется.Почему?

#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 ]

4 голосов
/ 18 февраля 2010

Где твой QTimer? Я думаю, что это проблема. Некоторое время я не делал Qt, но, насколько я помню, первый и третий аргументы connect - это указатели на объекты, а у вас нет QTimer указателя.

3 голосов
/ 18 февраля 2010

Подводя итог предыдущим комментариям и ответам:

  • компилятор говорит вам, по крайней мере, что он не понимает, если не прямо, что не так с вашим кодом => если вы этого не сделаетепоймите, что говорит компилятор, отправьте сообщение об ошибке с вашим вопросом, чтобы оно помогло тем, кто говорит "compilese"
  • "connect", соединит сигнал объекта со слотом другого объекта -> передать объекты для соединения, а не классы
  • подключенные объекты должны существовать в течение предполагаемой продолжительности вашего соединения, которое вы сейчас подключаете, в лучшем случае автоматические экземпляры 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;)

1 голос
/ 19 февраля 2010

Скиллридк прав!
См. Документацию и слоты qt doc .Для метода 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()));   
...

Надеюсь, это поможет!

0 голосов
/ 18 февраля 2010

Не уверен, но попробуйте:

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

Упс, думал, что myTimer является экземпляром QTimer, а не подклассом. Создайте экземпляр QTimer и укажите его в качестве первого параметра. И this как третий.

...