Qt使用信号和槽连接主窗口和对话框

Qt connect mainwindow and dialog using signal and slot

我正在尝试使用信号和插槽连接 mainwindow 和对话。我对qt很陌生。我在 mainwindow.ui 中有一个 lineEdit 和一个 pushButton,在 dialog.ui 中有一个 lineEdit。我有那些非常基本的代码:

mainwindow.h:

signals:
    void sendString(QString);


mainwindow.cpp:

void MainWindow::on_pushButton_clicked()
{
    Dialog *mDialog = new Dialog(this);
    emit sendString(ui->lineEdit->text());
    connect(this, SIGNAL(sendString(QString)), mDialog, SLOT(showString(QString)));
    mDialog->show();
}


dialog.h:

private slots:
    void showString(QString);


dialog.cpp:

void Dialog::showString(QString str)
{
    ui->lineEdit->setText(str);
}


但是在我点击pushButton之后,对话框出现了,但是在lineEdit里面没有任何变化。
我希望我解释清楚了吗?
有人可以向我解释为什么以及如何解决这个问题吗?谢谢。

您必须在 发射之前创建连接。

但在您的情况下,您根本不需要主窗口的信号。您直接调用 showString 方法。

连接后发出信号

void MainWindow::on_pushButton_clicked()
{
    Dialog *mDialog = new Dialog(this);
    connect(this, SIGNAL(sendString(QString)), mDialog, SLOT(showString(QString)));
    mDialog->show();

    emit sendString(ui->lineEdit->text());
}