2017-05-04 25 views
0

嗨我是編程新手,我已經說過了解關於C++和qt的知識。我想創建一個簡單的程序,在這個程序中用戶給出了gui的輸入,然後這些輸入被髮送到一個函數(這是一個單獨的頭文件和cpp文件),該函數在該函數中進行評估並再次顯示在gui中。爲qt創建器中的函數添加單獨的文件

我有三個文件,即main.cpp中,(mainwindow.cpp & mainwindow.h),和(addition.cpp和addition.h)

我想,該值從mainwindow.ui讀取(從lineedit),然後將它們發送到函數addition.cpp並進行評估,然後發送回mainwindow.cpp或mainwindow.ui(lineedit),以便我可以訪問此結果。

這裏是代碼我試圖

請幫我在理解過程

//main.cpp 
    #include "mainwindow.h" 
#include <QApplication> 

    int main(int argc, char *argv[]) 
    { 
     QApplication a(argc, argv); 
     MainWindow w; 
     w.show(); 

     return a.exec(); 
    } 

//mainwindow.h. 
#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include "addition.h" 
#include <QMainWindow> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
    QObject *sumnum; 


private: 
    Ui::MainWindow *ui; 
    float number1,number2; 

public slots: 
    void results(float); 
private slots: 
    void on_addnum_clicked(); 
}; 

#endif // MAINWINDOW_H 

//mainwindow.cpp. 
#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    sumnum = new QObject(this); 
    connect(sumnum,SIGNAL(add(float)),this,SLOT(results(float))); 
} 

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



void MainWindow::results(float answer) 
{ 
    ui->sum->setText(QString::number(answer)); 
} 

void MainWindow::on_addnum_clicked() 
{ 
    addresult(ui->num1->text().toDouble(),ui->num2->text().toDouble()); 
} 

//addition.h 
#ifndef ADDITION_H 
#define ADDITION_H 

#include <QObject> 

class addition : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit addition(QObject *parent = 0); 
    void run(float, float); 

private: 
    float answer; 

signals: 
    void add(float); 

public slots: 
}; 

#endif // ADDITION_H 

//addition.cpp 
#ifndef ADDITION_H 
#define ADDITION_H 

#include <QObject> 

class addition : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit addition(QObject *parent = 0); 
    void run(float, float); 

private: 
    float answer; 

signals: 
    void add(float); 

public slots: 
}; 

#endif // ADDITION_H 

回答

0
  • 在你MainWindow類,sumnum變量的類型必須是addition因爲你需要完整的類型才能連接到它的信號/插槽

  • sumnum class應該有一個公共功能,如void add(flaot n1, float n2),所以你可以在你的on_addnum_clicked函數

+0

嗨,你可以更正上面的代碼。這對我來說是新的 –

+0

您需要創建一個類的對象,而不是ob QObject本身來將信號連接到您的插槽:用'sumnum = new addition(this)替換'sumnum = new QObject(this);''since你的'add'類定義了'add'信號。 – xander

相關問題