gpt4 book ai didi

c++ - Qt:如何将输入值从 on_pushButton_clicked() 函数传递给 paintGL()

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:48 27 4
gpt4 key购买 nike

我正在使用 QT 开发抵押贷款计算器。当用户单击按钮时,“on_pushButton_clicked()”函数将获取输入。

问题是我对如何将输入从“on_pushButton_clicked()”传递到“paintGL()”函数以进行绘图感到困惑。

我最后的办法是使用全局变量来解决这个问题,但我真的想避免这样的事情......所以如果有人能用更好的方法启发,我将非常欢迎。

我的代码如下:

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

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

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT
public:

explicit MainWindow(QWidget *parent = 0);
~MainWindow();
template <class T>
T inputcheck(QLineEdit *input, T output);
//friend class GLwidget;
double loan;
int maturity;
double rate1;
double rate2;
double rate3;
int period2;
int period3;

private slots:
void on_pushButton_Calculate_clicked();

void on_pushButton_Quit_clicked();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QCoreApplication>
#include <QDesktopWidget>
#include "glwidget.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

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

template <class T>
T MainWindow::inputcheck(QLineEdit *input, T output)
{
bool ok;
output = input->text().toDouble(&ok);
if(TRUE && output > 0)
{
return output;
}
else
{
input->setText("ERR");
return 0;
}
}

void MainWindow::on_pushButton_Calculate_clicked()
{

// getting inputs()
loan = inputcheck(ui->lineEdit_loan, loan);
maturity = inputcheck(ui->lineEdit_maturity, maturity);
rate1 = inputcheck(ui->lineEdit_rate1, rate1);
rate2 = inputcheck(ui->lineEdit_rate2, rate2);
rate3 = inputcheck(ui->lineEdit_rate3, rate3);
period2 = inputcheck(ui->lineEdit_period2, period2);
period3 = inputcheck(ui->lineEdit_period3, period3);
printf("loan:%f, maturity:%d,rate1:%f,rate2:%f,rate3:%f, period2:%d, period3:%d\n", loan, maturity, rate1, rate2, rate3, period2, period3);

}

void MainWindow::on_pushButton_Quit_clicked()
{
QCoreApplication::quit();

}

glwidget.h

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QObject>
#include <QGLWidget>


class calculation;
class GLwidget : public QGLWidget
{
Q_OBJECT
public:
explicit GLwidget(QWidget *parent = 0);
void initializeGL();
void paintGL();
void resizeGL(int width, int height);

private:

};

#endif // GLWIDGET_H

glwidget.cpp

#include "glwidget.h"
#include <gl/GL.h>


GLwidget::GLwidget(QWidget *parent):QGLWidget(parent)
{
}

void GLwidget::initializeGL()
{
}

void GLwidget::paintGL()
{
**// I need the inputs to be here!!**
}

void GLwidget::resizeGL(int width, int height)
{
}

感谢您的帮助:)

最佳答案

移动 GLwidget 类中的变量。在这里我假设它们是公开的,但你可能想使用 setter 和 getter。然后,调用更新来刷新小部件。

void MainWindow::on_pushButton_Calculate_clicked()
{
ui->myglwidgetname->loan = inputcheck<double>(ui->lineEdit_loan);
ui->myglwidgetname->maturity = inputcheck<int>(ui->lineEdit_maturity);
ui->myglwidgetname->rate1 = inputcheck<double>(ui->lineEdit_rate1);
ui->myglwidgetname->rate2 = inputcheck<double>(ui->lineEdit_rate2);
ui->myglwidgetname->rate3 = inputcheck<double>(ui->lineEdit_rate3);
ui->myglwidgetname->period2 = inputcheck<int>(ui->lineEdit_period2);
ui->myglwidgetname->period3 = inputcheck<int>(ui->lineEdit_period3);
ui->myglwidgetname->update();
}

此外,您想要更正模板函数,因为它正在调用 toDouble 而不管 T 类型,这根本没有意义......

关于c++ - Qt:如何将输入值从 on_pushButton_clicked() 函数传递给 paintGL(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com