【问题标题】:Add separate files for functions in qt creator在 qt creator 中为函数添加单独的文件
【发布时间】:2017-05-04 07:26:15
【问题描述】:

嗨,我是编程新手,我已经说过学习 c++ 和 qt 。我想创建一个简单的程序,其中用户从 gui 提供输入,然后将这些输入发送到一个函数(这是一个单独的头文件和 cpp 文件),在这个函数中评估值并再次显示在 gui 中。

我有三个文件,分别是 main.cpp、(mainwindow.cpp & mainwindow.h) 和 (addition.cpp 和 add.h)

我希望从 mainwindow.ui(从 lineedit)读取值,然后将它们发送到函数 add.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

【问题讨论】:

    标签: c++ qt function


    【解决方案1】:
    • 在您的 MainWindow 类中,sumnum 变量的类型必须是 addition,因为您需要完整的类型才能连接到其信号/插槽

    • sumnum 类应该有一个像 void add(flaot n1, float n2) 这样的公共函数,所以你可以在你的 on_addnum_clicked 函数中调用它

    【讨论】:

    • 嗨,你能纠正上面的代码吗?这对我来说是新的
    • 您需要创建您的类的对象而不是 ob QObject 本身来将信号连接到您的插槽:将 sumnum = new QObject(this); 替换为 sumnum = new addition(this);,因为您的 addition 类定义了 add 信号。
    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多