QTimer не срабатывает

222
18 апреля 2017, 09:56

Доброго времени суток! Написал небольшой класс и в нем QTimer, но при вызове start() приложение входит в вечный цикл. С моей точки зрения, все норм, но видимо, что-то я не учел.

myclass.h

#include <QObject>
#include <QTimer>
class MyClass: public QObject
{
    Q_OBJECT
 public:
    MyClass(QObject *parent = 0);
    void start();
    virtual ~MyClass();
public slots:
    void showMessage();
private:
    QTimer *timer;
};

myclass.cpp

#include "myclass.h"
#include <iostream>
MyClass::MyClass(QObject *p): QObject(p)
{
 timer = new QTimer(this);
 QObject::connect(timer, &QTimer::timeout, this, &MyClass::showMessage);    
}
void MyClass::showMessage()
{
    timer->stop();
    std::cout << "Hello World!";
}
void MyClass::start()
{
    timer->start(1);
}
MyClass::~MyClass()
{
    delete timer;
}

main.cpp

#include <QCoreApplication>
#include "myclass.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyClass my;
    my.start();
    return a.exec();
}
Answer 1

Не понимаю в чём вопрос. У меня этот код собирается и работает корректно. Если у Вас не выводится "Hello World!", то это проблемы как я думаю именно с выводом (оно, скорее всего, выводит, просто Вы не видите куда). Можете попробовать создать Widget что бы было точно видно-заметно. Если вопрос в том, почему приложение не останавливается - а почему оно должно? Сам таймер останавливается, но цикл обработки событий продолжается. Можете попробовать дописать например exit(0) в ваш слот - тогда приложение завершится (с кодом 0).

READ ALSO
C++ показать вторую букву из слова

C++ показать вторую букву из слова

ПриветНужна помощь с выводом определенных букв из слова

277
Visual C++ Куча была повреждена (параметры: 0x774BCDD8)

Visual C++ Куча была повреждена (параметры: 0x774BCDD8)

Здравствуйте! Пишу свой класс Array, который представляет из себя массивПри вызове метода append() программа выдаёт исключение

427
Не удается создать стек в теле класса

Не удается создать стек в теле класса

Хочу создать стек с элементами класса Disk в классе Pole, но получаю ошибку: синтаксическая ошибка: отсутствие ";" перед "<"

224
Сложение двух больших чисел

Сложение двух больших чисел

Большие числа реализую как массив unsigned __int64[8]Как реализовать операции сложения и умножения для таких чисел? Нашел пример алгоритма на сайте,...

269