2017-04-13 5 views
0

MainWindowにライン編集で数値を出力する信号があります。ボタンをクリックしてダイアログを開くと、その番号をダイアログの行編集にコピーします。私はそれを接続することはできません。信号がqDebugで発光しているのがわかります。私はそれを間違っているか間違った場所に接続していますか?私は多くの方法を試みました。ここに私のコードスニペットがあります。私は、これは接続するために取得できますかMainWindowからの信号をダイアログのスロットに接続する方法

メインウィンドウ


//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"; 
} 

?私は多くの記事を読んだが、問題は解決しなかった。ありがとう。

答えて

0

コードのコメントで、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"; 
} 
+0

あなたeyllanescをありがとうございます。あなたは何度か私を助けてくれました。それは有り難いです。 – equati0n

関連する問題