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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при reimplementing timerEvent у наследника QMessageBox (решено)  (Прочитано 3452 раз)
Frostorator
Гость
« : Июль 31, 2011, 04:47 »

Пытаюсь использовать встроенный во все виджеты таймер, получаю следующие ошибки:
Цитировать
...\tickingqmessagebox.cpp:5: error: invalid use of incomplete type 'struct QTimerEvent'
...\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtCore\qobject.h:63: error: forward declaration of 'struct QTimerEvent'

Минимальный код (строка с ошибкой содержит комментарий):

Код:
tickingqmessagebox.h
Код:
#ifndef TICKINGQMESSAGEBOX_H
#define TICKINGQMESSAGEBOX_H

#include <QMessageBox>

class TickingQMessageBox : public QMessageBox
{
  Q_OBJECT
public:
  explicit TickingQMessageBox(QWidget *parent = 0) : QMessageBox(parent) {};
protected:
  void timerEvent(QTimerEvent *);
};

#endif // TICKINGQMESSAGEBOX_H

Код:
tickingqmessagebox.cpp
Код:
#include "tickingqmessagebox.h"

void TickingQMessageBox::timerEvent(QTimerEvent * event)
{
  if (event->timerId==0) {} // строка с ошибкой
}

main.cpp и .pro файл стандартные, компиляция только под desktop.
При попытке переноса реализации функции из .c в .h файл получаю на той же строке:
Цитировать
error: invalid use of member (did you forget the '&' ?)
P.S. последний SDK, компилирую в Creator
« Последнее редактирование: Июль 31, 2011, 16:09 от Frostorator » Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Июль 31, 2011, 08:31 »

Так не пробовал:

if (event->timerId() == 0) {}
Записан
Kolobok
Гость
« Ответ #2 : Июль 31, 2011, 10:54 »

#include <QTimerEvent>
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июль 31, 2011, 13:28 »

Код
C++ (Qt)
#include <QMessageBox>
 
class QTimerEvent;
 
class TickingQMessageBox : public QMessageBox
{
...
};
...

Код
C++ (Qt)
#include "tickingqmessagebox.h"
 
#include <QTimerEvent>
 
void TickingQMessageBox::timerEvent(QTimerEvent * event)
{
 if (event->timerId() == 0) {}
}
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Frostorator
Гость
« Ответ #4 : Июль 31, 2011, 16:08 »

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


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