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.