SIGNAL не работает при отладке

У меня проблема с подключением Qt5. Я разместил здесь код для быстрого просмотра:

void MainWindow::onMessage(const Message* message) { try { const TextMessage* textMessage = dynamic_cast<const textmessage*=""> (message); std::string text = ""; if (textMessage != NULL) { text = textMessage->getText(); } else { text = "NOT A TEXTMESSAGE!"; } int fieldIndex=message->getIntProperty("field"); QString qstr = QString::fromStdString(text); switch(fieldIndex) { case 0:ui->lineEdit->setText(qstr);break; case 1:ui->lineEdit_2->setText(qstr);break; case 2:ui->lineEdit_3->setText(qstr);break; case 3:ui->lineEdit_4->setText(qstr);break; case 4:ui->lineEdit_5->setText(qstr);break; case 5:ui->lineEdit_6->setText(qstr);break; case 6:ui->lineEdit_7->setText(qstr);break; case 7:ui->lineEdit_8->setText(qstr);break; case 8:ui->lineEdit_9->setText(qstr);break; } connect(ui->lineEdit_4,SIGNAL(textChanged(qstr)),ui->widget_diagram2,SLOT(upDateDatas(qstr))); }catch (CMSException& e) { e.printStackTrace(); }
}
</const>

Как вы можете видеть, я пытаюсь подключить сигнал textChanged, сгенерированный с помощью lineEdit_4, с помощью объекта widget_diagram2 ui и выполнить слот upDateDatas (qstr). Но что-то плохое происходит, потому что я получил это сообщение:

QObject::connect: No such signal QLineEdit::textChanged(qstr) in mainwindow.cpp:97
QObject::connect: (sender name: 'lineEdit_4')
QObject::connect: (receiver name: 'widget_diagram2')

лично я не знаю, почему.... где ошибка?

void MainWindow::upDateDatas(QString qstr){ bool ok; ****** value0=qstr.********(&ok); ****** key = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0; static ****** lastPointKey = 0; if (key-lastPointKey > 0.01) // at most add point every 10 ms { ui->widget_diagram2->graph(0)->addData(key, value0); ui->widget_diagram2->graph(0)->removeDataBefore(key-8); ui->widget_diagram2->graph(0)->rescaleValueAxis(); lastPointKey = key; } ui->widget_diagram2->xAxis->setRange(key+0.25, 8, Qt::AlignRight); //ui->widget_diagram2->replot();
}

и это ошибка:

QObject::connect: No such slot QCustomPlot::upDateDatas(QString) in mainwindow.cpp:97
QObject::connect: (sender name: 'lineEdit_4')
QObject::connect: (receiver name: 'widget_diagram2')

.h файл:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <qmainwindow>
#include <qtimer>
#include <activemq library="" activemqcpp.h="">
#include <decaf lang="" thread.h="">
#include <decaf lang="" runnable.h="">
#include <decaf util="" concurrent="" countdownlatch.h="">
#include <decaf lang="" integer.h="">
#include <decaf lang="" long.h="">
#include <decaf lang="" system.h="">
#include <activemq core="" activemqconnectionfactory.h="">
#include <activemq util="" config.h="">
#include <cms connection.h="">
#include <cms session.h="">
#include <cms textmessage.h="">
#include <cms bytesmessage.h="">
#include <cms mapmessage.h="">
#include <cms exceptionlistener.h="">
#include <cms messagelistener.h="">
#include "qcustomplot.h"
#include "IfacomAmqReceiver.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow, public MessageListener
{ Q_OBJECT
public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void connectionReceiver(); void onMessage(const Message*); void setupDiagram(); IfacomAmqReceiver* m_IfacomAmqListener;
private: Ui::MainWindow *ui;
private slots: void upDateDatas(QString);
};
#endif // MAINWINDOW_H
</cms></cms></cms></cms></cms></cms></cms></activemq></activemq></decaf></decaf></decaf></decaf></decaf></decaf></activemq></qtimer></qmainwindow>
1 ответ

Вы вызываете connect() неправильно. Должен быть:

connect(ui->lineEdit_4, SIGNAL(textChanged(QString)), ui->widget_diagram2, SLOT(upDateDatas(QString)));

Обратите внимание, что внутри connect вы должны передавать типы, а не имена переменных. Постоянные ссылки const type & в порядке, но в идеале должны быть опущены, чтобы получить type - это экономит на типизации, и это то, что connect внутренне делает в любом случае.

licensed under cc by-sa 3.0 with attribution.