Может ли кто-нибудь прокомментировать, как правильно выполнить выполнение SLOT?Проблема с параметрами СИГНАЛА и SLOT в QT
мой код:
prog::prog(QWidget *parent): QMainWindow(parent) //constructor (VisualStudio):
{
ui.setupUi(this);
QCustomPlot * customPlot = new QCustomPlot(this);
setupRealtimeDataDemo(customPlot);
// + more code
}
void prog::setupRealtimeDataDemo(QCustomPlot * customPlot)
{
customPlot->addGraph(); //
// + more related with graph methods
// setup a timer that repeatedly calls realtimeDataSlot:
connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot(QCustomPlot)));
dataTimer.start(0); // Interval 0 means to refresh as fast as possible
}
void prog::realtimeDataSlot(QCustomPlot *customPlot)
{
// calculate two new data points:
#if QT_VERSION < QT_VERSION_CHECK(4, 7, 0)
double key = 0;
#else
double key = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0;
#endif
static double lastPointKey = 0;
if (key-lastPointKey > 0.01) // at most add point every 10 ms
{
double value0 = qSin(key); //sin(key*1.6+cos(key*1.7)*2)*10 + sin(key*1.2+0.56)*20 + 26;
double value1 = qCos(key); //sin(key*1.3+cos(key*1.2)*1.2)*7 + sin(key*0.9+0.26)*24 + 26
// add data to lines:
customPlot->graph(0)->addData(key, value0);
customPlot->graph(1)->addData(key, value1);
// + more code related with graph
}
}
Вот мои выводы:
SIGNAL и SLOT нужна такая же подпись, встроенная программа не будет работать SLOT (потому что SLOT становится неопределенным).
Возможное решение: удалить форму аргумента QCustomPlot SLOT, но как , тогда следует отправить указатель на realtimeDataSlot на QCustomPlot? Может быть можно перегрузить таймаут()? Может быть, другое решение?
я обнаружил, когда я использую #include «winsock2.h» и пытаются «Содействие в ...» вариант как в http://www.qcustomplot.com/index.php/tutorials/settingup ошибок появляется о параметрах переопределения, поэтому этот способ я не могу использовать. Я также не буду использовать qwt
Спасибо за помощь!
Большой , оно работает! У меня есть еще один вопрос, в приведенном выше коде показано двойное значение 0 и двойное значение1 на графике. В программе у меня есть функция, которая собирает двойные значения в реальном времени (значения сначала являются строками в совпадениях совпадений (regex), тогда я хотел бы сделать их двойными значениями. Функция, которая собирает данные, является void prog :: collect_data (u_char * data2 , int Size). Не могли бы вы помочь, как подключить эту функцию к уже работающему realtimeDataSlot? –