Russian Qt Forum
Ноябрь 25, 2024, 02:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTimer и QLabel  (Прочитано 3331 раз)
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?
Записан
Fat-Zer
Гость
« Ответ #1 : Январь 30, 2011, 15:03 »

не пишите слоты в хеднере и будет вам счастье
Записан
smirnoff
Гость
« Ответ #2 : Январь 30, 2011, 15:11 »

не пишите слоты в хеднере и будет вам счастье

Не понял.  Улыбающийся Можно пример?
Записан
Fat-Zer
Гость
« Ответ #3 : Январь 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...
Записан
smirnoff
Гость
« Ответ #4 : Январь 30, 2011, 16:55 »

Спасибо. Все заработало.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.11 секунд. Запросов: 20.