2015-05-12 57 views
1

我有一个名为dosecalibration的类,其中包含dosecalibration.cpp和dosecalibration.h。该类与一个单独的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()信号是在dosecalibration UI中按下按钮时发出的。 connect应该表示apply_dose的值被发送到控制台,但是不显示任何内容。

编辑:

配售if语句中的连接,以确定它是否真正连接确认它确实是正常工作。

//connects for dose calibration 

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

} 

上面的代码成功输出确认连接的消息。

有什么想法?

+3

connect()成功了吗?如果失败,它可能会在应用程序调试中放入一些信息。它也是一个函数,返回一个布尔值,所以你可以把它放在一个if()语句中,并自己输出一些调试信息。 –

+1

“apply_dose发送到控制台”...如果您碰巧使用msvc,它将实际发送到IDE中的输出窗口。 –

+0

@NicolasHolthaus对不起,应该没有指定,我一直在检查和输出 –

回答

4

如果您确实需要多个实例,请删除dosecalibration的多个实例,或者确保连接其中的每个实例。