Подключение кнопки диалога к гнезду MainWindow - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть окно 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 не вызывается в этом случае, даже если он, кажется, связан с ним?

1 Ответ

0 голосов
/ 26 сентября 2019

Хорошо, проблема была в том, что я подключил сигнал Dialog::drawObjects к слоту в MainWindow после , и на экране появилось dialog.exec();.Это должно было быть очевидно, но, конечно, диалоговое окно не может знать о каких-либо соединениях, выполненных после того, как оно уже запущено в своем собственном цикле событий.

...