Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: smirnoff от Январь 30, 2011, 14:48



Название: QTimer и QLabel
Отправлено: smirnoff от Январь 30, 2011, 14:48
Хочу реализовать отображение времени в QLabel. Описал класс:

Код:
class Clock : public QLabel
{
Q_OBJECT

public:
    Clock(QWidget* pwgt = 0) : QLabel(pwgt)
    {
        QTimer* ptimer = new QTimer(this);
        connect (ptimer, SIGNAL (timeout()) , SLOT (slotUpdateDateTime())) ;
        ptimer->start(500);
        slotUpdateDateTime();
    }

public slots:
void slotUpdateDateTime ()
    {
        QString str = QDateTime::currentDateTime().toString(Qt::SystemLocaleDate);
        setText("<H2><CENTER>" + str + "</CENTER></H2>");
    }
};

В main пишу:

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;

    Clock cl(&w);

    w.show();

    return a.exec();
}

Не хочет компилится. Пишет:

Код:
C:/Qt/pro/datetimer-build-desktop/debug/main.o:: In function `Clock':
C:\Qt\pro\datetimer-build-desktop/../datetimer/main.cpp:9: error: undefined reference to `vtable for Clock'
C:\Qt\pro\datetimer-build-desktop/../datetimer/main.cpp:9: error: undefined reference to `vtable for Clock'
C:/Qt/pro/datetimer-build-desktop/debug/main.o:: In function `~Clock':
C:\Qt\pro\datetimer-build-desktop/../datetimer/main.cpp:5: error: undefined reference to `vtable for Clock'
C:\Qt\pro\datetimer-build-desktop/../datetimer/main.cpp:5: error: undefined reference to `vtable for Clock'
:: error: collect2: ld returned 1 exit status

Наверное ему не нравится строка:

Код:
Clock cl(&w);

Так как же создать объект класса Clock и отобразить на Widget?


Название: Re: QTimer и QLabel
Отправлено: Fat-Zer от Январь 30, 2011, 15:03
не пишите слоты в хеднере и будет вам счастье


Название: Re: QTimer и QLabel
Отправлено: smirnoff от Январь 30, 2011, 15:11
не пишите слоты в хеднере и будет вам счастье

Не понял.  :) Можно пример?


Название: Re: QTimer и QLabel
Отправлено: Fat-Zer от Январь 30, 2011, 15:21
в хедере:
Код
C++ (Qt)
class Clock : public QLabel
{
Q_OBJECT
 
public:
   Clock(QWidget* pwgt = 0) : QLabel(pwgt)
   {
       QTimer* ptimer = new QTimer(this);
       connect (ptimer, SIGNAL (timeout()) , SLOT (slotUpdateDateTime())) ;
       ptimer->start(500);
       slotUpdateDateTime();
   }
 
public slots:
   void slotUpdateDateTime ();
};
 

в cpp:
Код
C++ (Qt)
   void Clock::slotUpdateDateTime ();
   {
       QString str = QDateTime::currentDateTime().toString(Qt::SystemLocaleDate);
       setText("<H2><CENTER>" + str + "</CENTER></H2>");
   }
 

И конструктор лучше тоже вынести в cpp...


Название: Re: QTimer и QLabel
Отправлено: smirnoff от Январь 30, 2011, 16:55
Спасибо. Все заработало.