Обратиться к слоту

253
26 ноября 2016, 18:54

Расширяю класс, создаю таймер и слот таймера. При исполнении говорит, что нет слота в классе, который расширяю. Как подписаться на слот, который в расширяемом классе?

    Graph::Graph(QWidget *parent) : QCustomPlot(parent)
    {
      ...
        trackTimer = new QTimer(); 
        connect(trackTimer, SIGNAL(timeout()), this, SLOT(PlaybackStep()));
        qDebug() << this->metaObject()->className(); // выдаёт QCustomPlot а нужно Graph
        trackTimer->start(100);
    }
    void Graph::PlaybackStep()
    {...}

Вывод приложения QObject::connect: No such slot QCustomPlot::PlaybackStep() in ..\stms2\src\graph.cpp:21 Спасибо.

Answer 1

Объявите Q_OBJECT в классе Graph. Примерно так:

class Graph : public QCustomPlot
{
Q_OBJECT //Добавить это
public:
...
public slots: //есть вероятность, что вы забыли public slots (либо private slots, protected slots)
    void PlaybackStep(); //Ваш слот
};

Перед компиляцией кликните правой кнопкой мыши по узлу проекта и выберите "Run qmake" чтобы не заглючило.

READ ALSO
Время жизни временной переменной

Время жизни временной переменной

Пусть есть две функции

254
pthread_create() как правильно работает?

pthread_create() как правильно работает?

У меня проблемы с использованием pthread_create если передавать в аргумент метод класса, потому что компилятор постоянно выдает ошибку:

274
проблема с дружественной функцией

проблема с дружественной функцией

Я новичек в С++, объясните пожалуйста, почему не отрабатывает дружественная функция в main? Имеется:

343
Пауза в бесконечном цикле по кнопке

Пауза в бесконечном цикле по кнопке

Консольное приложениеЕсть цикл, в нем по очереди вызываются 3 метода класса

229