如何将Qdialog中的信号连接到QMainwindow中的插槽

时间:2019-07-04 06:43:59

标签: qt

我与QT Creator 4.9.1一起工作,并且与设计师进行了GUI协商。我有一个带有StackedWidget的MainWindow,大约有60页,在我的主窗口中有一个按钮,带有onButton_clicked信号,我打开一个对话框(显示图片)以插入数字以设置用户想要查看的页面在主窗口中。

我的问题是,信号来自对话框,名称为on_pushButton_Enter_clicked,我的插槽位于主窗口中,名称为setCurrentIndex()。我已经阅读了以下文章:“如何将MainWindow的信号连接到对话框中的插槽”和“使用信号和插槽Qt连接主窗口和对话框”。

但这对我没有帮助,因为我的对话框不知道我的主窗口,也不知道如何连接它们。

信号:

Dialognummer_eingeben.h
...
signals:
    void enterButtonPressed();
...


void Dialognummer_eingeben::on_pushButton_Enter_clicked()
{
  QString text = ui->lineEdit_Dialognummer->text();
  ui->lineEdit_Dialognummer->setText("");
  this->reject();
  emit enterButtonPressed();
}

广告位:

Terminal::Terminal(QWidget *parent) : QMainWindow(parent), ui(new Ui::Terminal)
{
  ui->setupUi(this);
  QObject::connect(&dialog, SIGNAL(enterButtonPressed()), this, SLOT(setCurrentIndex()));
}

void Terminal::setCurrentIndex()
{
  int num = dianr.getNum();
  QString strNum = QString::number(num);
  switch(num)
  { 
    ....
  }
}

enter image description here

编辑:1.添加信号和插槽代码        2.在代码内进行一些更改

1 个答案:

答案 0 :(得分:1)

  

在我的主窗口中,我有一个按钮,通过onButton_clicked信号,我打开一个对话框(显示图片)以插入数字来设置用户想要在主窗口中看到的页面。

您还必须在对话框类中添加一个信号,一旦按回车按钮,应使用on_pushButton_Enter_clicked作为功能,否则该信号应发出。在对话框类中添加一个信号,例如“ enterButtonPressed()”,并在函数on_pushButton_Enter_clicked中发出该信号。

在主窗口内(在创建对话框的某个位置)添加以下行:

connect(dialog, SIGNAL(enterButtonPressed()), this, SLOT(SlotNameWhichShouldGetCalled()));

编辑:即使以上解决方案可行,我仍然想到了一个更好的解决方案。 通常,您应该使用QDialog :: accepted信号进行连接(请参见https://doc.qt.io/archives/qt-4.8/qdialog.html#accept)。

具体步骤:

  1. 在代码底部的on_pushButton_Enter_clicked()中添加accept()而不是this-reject()(我想您希望对话框成功关闭而不是被拒绝吗?)
  2. 通过添加连接到QDialog :: accepted()信号

    QObject::connect(&dialog, SIGNAL(accepted()), this, SLOT(setCurrentIndex()));
    

另外,请确保connect(...)函数没有错误。如果找不到信号/插槽或信号/插槽不匹配,您应该在Qt Creator的应用程序输出中看到一些内容