繁体   English   中英

如何将信号从MainWindow连接到对话框中的插槽

[英]How to Connect Signal from MainWindow to Slot in Dialog

我在MainWindow中发出信号,以在行编辑中发出一个数字。 当我单击一个按钮打开对话框时,我希望将该数字复制到对话框中的行编辑中。 我无法连接。 我可以看到qDebug正在发出信号。 我是在错误的地方还是在错误的地方? 我尝试了很多方法。 这是我的代码段。

主窗口


//My MainWindow
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {

    ui->setupUi(this);

    //This is the number I am trying to send to the dialog
    ui->checkingAmount->setText(QString::number(1000.00, 'f', 2));
    ui->checkingAmount->setReadOnly(true);     
}

//Emit the data here
void MainWindow::on_transferButton_clicked() {

 transferWindow = new TransferWindow(this);
 transferWindow->show();

 //trying to emit the data
 QString data =ui->checkingAmount->text();
 emit shareCheckingData(data);             
 qDebug()<<"emitting mainwin amount";

}

对话


//My Dialog
TransferWindow::TransferWindow(QWidget *parent) : QDialog(parent),ui(new Ui::TransferWindow) {

    ui->setupUi(this); 

    //I have tried several variations of this
    //mainWindow = new MainWindow();
    connect(mainWindow, SIGNAL(shareCheckingData(QString)),this, SLOT(getAmountFromMainWin(QString)));
}

//Here is the connecting slot to get the data from main window
void TransferWindow::getAmountFromMainWin(QString n) {

    float CheckTotal = n.toFloat();
    ui->checkingAmount->setReadOnly(true);
    ui->checkingAmount->setText(QString::number(CheckTotal));
    qDebug()<<"setting amount";
}

我该如何连接? 我读了很多帖子,但并没有解决问题。 谢谢。

我在代码的注释中注意到,您打算创建MainWindow实例并尝试连接到该实例,因为它是一个新实例,与前一个实例不同,因此您将无法获得它。

首先,我们必须创建实例,然后将其连接,这可以在构造函数中完成。

MainWindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->checkingAmount->setText(QString::number(1000.00, 'f', 2));
    ui->checkingAmount->setReadOnly(true);

    transferWindow = new TransferWindow(this);

    connect(this, &MainWindow::shareCheckingData, transferWindow, &TransferWindow::getAmountFromMainWin);
    //old style
    //connect(this, SIGNAL(shareCheckingData(QString)), transferWindow, SLOT(getAmountFromMainWin(QString)));
}

void MainWindow::on_transferButton_clicked()
{

    //trying to emit the data
    QString data =ui->checkingAmount->text();
    emit shareCheckingData(data);
    qDebug()<<"emitting mainwin amount";

    transferWindow->show();

}

TransferWindow.cpp

TransferWindow::TransferWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::TransferWindow)
{
    ui->setupUi(this);
}

void TransferWindow::getAmountFromMainWin(QString n)
{
    float CheckTotal = n.toFloat();
    ui->checkingAmount->setReadOnly(true);
    ui->checkingAmount->setText(QString::number(CheckTotal));
    qDebug()<<"setting amount";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM