【问题标题】:Connecting a dialog button to a MainWindow slot将对话框按钮连接到 MainWindow 插槽
【发布时间】:2019-09-25 21:01:24
【问题描述】:

我有一个Dialog 窗口,它应该能够将来自QSpinBoxint 和来自枚举列表enum ObjectType {FASTBALL, ODDBALL, END}ObjectType 传递给MainWindow 插槽。我已经在 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); 信号。 来自QDialogaccept 插槽重新定义如下:

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 中的插槽在这种情况下没有被调用,即使它似乎已连接到它?

【问题讨论】:

  • 尝试使用:connect(&dialog, &Dialog::drawObjects, this, &Other_Class::spawnObjects); 并提供 MRE
  • 给信号起被动名称来描述它们所发出的信号是个好主意。插槽(以及任何真正的非信号功能)然后以主动语态描述它们这样做。使connects 更具可读性。

标签: c++ qt qt5 c++14


【解决方案1】:

好的,所以问题在于我将Dialog::drawObjects 信号连接到MainWindow 中的插槽之后对话框显示为dialog.exec();。这应该很明显,但是对话窗口当然不能知道在它自己的事件循环中已经启动后建立的任何连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多