У меня есть окно Dialog
, которое должно передавать int
из QSpinBox
и ObjectType
из нумерованного списка enum ObjectType {FASTBALL, ODDBALL, END}
в MainWindow
слот.Я создал и открыл диалоговое окно в конструкторе MainWindow
с
MainWindow::MainWindow(ObjectController* controller, QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow), engine_(controller)
{
ui->setupUi(this);
Dialog dialog(this);
dialog.exec();
QGraphicsScene* scene = new QGraphicsScene;
view_ = new QGraphicsView(this);
view_->setScene(scene);
ui->gridLayout->addWidget(view_);
scene->setSceneRect(0, 0, VIEW_WIDTH, VIEW_HEIGHT);
connect(ui->startButton, &QPushButton::clicked,
this, &MainWindow::startOrStop);
connect(ui->exitButton, &QPushButton::clicked,
this, &MainWindow::close);
connect(&dialog, &Dialog::drawObjects,this,&MainWindow::spawnObjects);
// Set timer
timer_ = new QTimer(this);
connect(timer_, &QTimer::timeout,
this, &MainWindow::moveObjects);
timer_->setInterval(CLOCK_MS);
}
На стороне Dialog : public Qdialog
у меня есть QPushButton acceptButton_;
, подключенный к accept
слот определен в том же классе.Диалог также имеет закрытые поля
int nOfObjectsToBeDisplayed_;
ObjectType objectType_;
и сигнал void drawObjects(int amount, ObjectType type);
.Слот accept
из QDialog
переопределен следующим образом:
void Dialog::accept()
{
emit drawObjects(nOfObjectsToBeDisplayed_, objectType_);
}
Теперь начинается раздражающая часть.Со стороны MainWindow
я пытаюсь передать текущее состояние Dialog
в слот void spawnObjects(int count, ObjectType type);
с помощью
connect(&dialog, SIGNAL(drawObjects(int, ObjectType)),this,SLOT(spawnObjects(int, ObjectType)));
Однако это не имеет никакого эффекта.Слот не вызывается, что я знаю, поскольку в его определении есть строка qDebug() << "Count: " << count << " Type: " << type;
, которая должна выводить количество переданных объектов и тип объекта на консоль.
Почему слот в MainWindow
не вызывается в этом случае, даже если он, кажется, связан с ним?