Windows에서 Qt 5를 사용하고 있고 QDialog 클래스가 여러 개인 GUI 응용 프로그램을 작성 중입니다. QMainWindow 클래스의 인스턴스가 생성 된 후 QMainWindow 클래스의 트리거 된 동작에서 QDialog의 신호를 연결하려고합니다. Qt의 설명서는 여기 http://doc.qt.io/qt-4.8/signalsandslots.html 및 여기 https://wiki.qt.io/New_Signal_Slot_Syntax입니다. stackoverflow에 대한 많은 질문을 통해 초기 오류를 수정하는 데 도움이되었지만이 문제를 해결하지는 못했습니다.Qt - 트리거 된 동작에서 신호/슬롯 연결
내가 점점 계속 오류 :
" ','토큰 앞에 차 표현 예상"나는 연결
connect(sender, SIGNAL (valueChanged(QString,QString)),
receiver, SLOT (updateValue(QString)));
새 구문 모두 이전 구문을 시도 (아래의 .cpp 파일에 표시)
connect(sender, &Sender::valueChanged,
receiver, &Receiver::updateValue);
MainWindow가 만들어집니다. n main.cpp와 두 번째 대화 상자가 on_action_someAction_triggered()로 생성되므로 참조하는 인스턴스가 존재한다는 것을 알 수 있습니다. 저에게 SIGNAL과 SLOT을 연결하는 더 좋은 방법이 있습니까?
다음은 내가 작업중인 코드입니다 (관련없는 코드 제외).
MainWindow를의 .H :
#include <QMainWindow>
#include "shipdia.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void loadSelectedShip(QString shipName);
private slots:
void on_actionNew_Ship_triggered();
private:
Ui::MainWindow *ui;
shipdia *sDialog;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextStream>
#include <QObject>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionNew_Ship_triggered()
{
sDialog = new shipdia(this);
QObject::connect(&shipdia, //this is were I attempt to
&shipdia::sendShip, //connect the signal/slot
this,&MainWindow::loadSelectedShip); //but always get an error
sDialog ->show();
}
void MainWindow::loadSelectedShip(QString shipName)
{
... do something ... //this code works, but the signal is never received
}
qdialog.h
#ifndef SHIPDIA_H
#define SHIPDIA_H
#include "functions.h"
#include <QDialog>
namespace Ui {
class shipdia;
}
class shipdia : public QDialog
{
Q_OBJECT
public:
explicit shipdia(QWidget *parent = 0);
~shipdia();
private slots:
void on_pushButton_2_clicked();
signals:
void sendShip(QString shipName);
private:
Ui::shipdia *ui;
};
#endif // SHIPDIA_H
qdialog.cpp
#include "shipdia.h"
#include "ui_shipdia.h"
#include <QObject>
#include <QMessageBox>
#include <QTextStream>
#include <QDir>
shipdia::shipdia(QWidget *parent) :
QDialog(parent),
ui(new Ui::shipdia)
{
ui->setupUi(this);
}
shipdia::~shipdia()
{
delete ui;
}
void shipdia::sendSelectedShip(QString shipName)
{
emit sendShip(shipName); //I previously just emitted sendSelectedShip,
//but separating the function did not fix it.
}
void shipdia::on_pushButton_2_clicked()
{
//Code below functions up to next comment
QString shipName = ui->line_23->text();
shipName = QDir::currentPath() + "/shipFolder/" + shipName + ".txt";
QFile shipFile(shipName);
QStringList stringList;
if (shipFile.open(QIODevice::ReadOnly))
{
QTextStream in(&shipFile);
while(!in.atEnd())
{
QString line = in.readLine();
if(line.isNull())
break;
else
stringList.append(line);
}
shipFile.close();
}
//Code above functions^
sendSelectedShip(shipName); //this line does not produce an error
}
'shipdia'는 ('new shipdia ...가 믿어지면) 유형입니다. 'connect (& shipdia, ...) '는 의미가 없습니다. 아마 당신은'connect (sDialog, ...)' –