2017-05-04 66 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

相关问题