我有一个Dialog
窗口,应该能够将int
中的QSpinBox
和枚举列表ObjectType
中的enum ObjectType {FASTBALL, ODDBALL, END}
传递给MainWindow
插槽。我已经使用{p>创建并打开了MainWindow
的cosntructor中的对话框窗口。
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
端,我尝试通过{p>将Dialog
的当前状态传递到插槽void spawnObjects(int count, ObjectType type);
connect(&dialog, SIGNAL(drawObjects(int, ObjectType)),this,SLOT(spawnObjects(int, ObjectType)));
但是,这无效。该插槽未调用,我知道,因为在其定义中有一条qDebug() << "Count: " << count << " Type: " << type;
行,该行应将传递的对象数量和对象类型打印到控制台。
在这种情况下,即使MainWindow
中的插槽似乎已连接,为什么也没有调用它?
答案 0 :(得分:0)
好的,所以问题出在我将Dialog::drawObjects
信号连接到MainWindow
后的插槽中。 对话框显示为dialog.exec();
。这本来应该很明显,但是在对话窗口已经在其自己的事件循环中启动之后,当然对话窗口将无法识别任何连接。