1

dosecalibration.cpp と dosecalibration.h を含む dosecalibration というクラスがあります。クラスは別の UI フォームに関連付けられています。フォーム上でボタンがクリックされると、シグナルが発せられます。

この信号を受信するためのメイン ウィンドウ内の接続がありますが、機能していないようです。コードは次のとおりです。

dosecalibration.h :

#ifndef DOSECALIBRATION_H
#define DOSECALIBRATION_H

#include <QDialog>
#include <QDebug>




namespace Ui {
class dosecalibration;
}

class dosecalibration : public QDialog
{
    Q_OBJECT

public:
    explicit dosecalibration(QWidget *parent = 0);
    ~dosecalibration();

    double dosefactor;
    //bool dose;

private slots:
    void on_useCharge_clicked();

    void on_useCounts_clicked();

    void on_pushButton_clicked();

//    void on_pCSB_valueChanged();

//    void on_countsSB_valueChanged();

signals:
    void applydose();


private:



    Ui::dosecalibration *ui;
};

#endif // DOSECALIBRATION_H

dosecalibration.cpp :

#include "dosecalibration.h"
#include "ui_dosecalibration.h"

dosecalibration::dosecalibration(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::dosecalibration)
{
    ui->setupUi(this);
    ui->countsSB->setEnabled(false);
    ui->countsSB->setValue(ui->pCSB->value()*100/9.6);
}

dosecalibration::~dosecalibration()
{
    delete ui;
}


void dosecalibration::on_useCharge_clicked()
{
    ui->countsSB->setEnabled(false);
    ui->pCSB->setEnabled(true);
}

void dosecalibration::on_useCounts_clicked()
{
    ui->pCSB->setEnabled(false);
    ui->countsSB->setEnabled(true);
}

void dosecalibration::on_pushButton_clicked()
{

    if(ui->useCharge->isChecked()){
        dosefactor = ui->pCSB->value();

    }
    else if(ui->useCounts->isChecked()){
        dosefactor = ui->countsSB->value();
    }
    emit applydose();
}

//void dosecalibration::on_pCSB_valueChanged()
//{
//    ui->countsSB->setValue(ui->pCSB->value()*100/9.6);
//}

//void dosecalibration::on_countsSB_valueChanged()
//{
//    ui->pCSB->setValue(ui->countsSB->value()*9.6/100);
//}

そして mainwindow.h (「インクルード」とスロットのみが含まれています):

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <AFE_variables.h>
#include <QMainWindow>

#include "FPGA/fpga.h"
#include "FPGA/okFrontPanelDLL.h"
#include "decoder.h"
#include "analysis.h"
#include "about.h"
#include "logfile.h"
#include "Graph/graphicsscene.h"
#include "Graph/graphdialog.h"
#include "Graph/qcustomplot.h"
#include "Graph/graphicsview.h"
#include "settingsdialog.h"
#include "dosecalibration.h"

#include <QFileDialog>
#include <QProgressBar>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QGraphicsTextItem>
#include <QDialog>
#include <QDebug>
#include <math.h>

slots:

    //Dose calibration

    void InitialiseGraphsAfterDose();
    void on_actionDose_Calibration_4_triggered();
    //void doseCalibrationEnabled();
private:
    //Initalisation
    void onStart();
    void AllocateMemory();
    void ConnectFPGA();
    bool CheckConnection();
    Ui::MainWindow *ui;
    okCFrontPanel *xem;
    FPGA *fpga;
    QProgressBar *progressBar;
    QTimer *PlayTimer;

    LogFile *logfiledialog;
    LogFile *logfileanalysis;
    QString LoadLogFilePath;

    dosecalibration *dose;

メインウィンドウクラスの一部であるgraphing.cppからのスニペット:

    //connects for dose calibration

    dose = new dosecalibration(this);
    connect(dose,SIGNAL(applydose()),this,SLOT(InitialiseGraphsAfterDose()));

}

void MainWindow::InitialiseGraphsAfterDose()
{
    apply_dose = true;
    InitialiseGraphs();
    qDebug() << apply_dose;
}

そのため、applydose()信号は線量キャリブレーション UI のボタンを押すだけで発信されます。これconnectは、apply_dose の値がコンソールに送信されることを意味するはずですが、何も表示されません。

編集:

connect をifステートメント内に配置して、それが本当に接続しているかどうかを判断することで、実際に正しく機能していることを確認できます。

    //connects for dose calibration

    dose = new dosecalibration(this);
    if(connect(dose,SIGNAL(applydose()),this,SLOT(InitialiseGraphsAfterDose())))
    {
        qDebug() << "connect worked";
    }

}

上記のコードは、接続を確認するメッセージを正常に出力します。

何か案が?

4

1 に答える 1

4

の複数のインスタンスを削除するdosecalibrationか、複数のインスタンスが本当に必要な場合は、それらのそれぞれを接続してください。

于 2015-05-12T12:49:39.793 に答える