QTでモーゲージ計算機を使用しています。 ユーザがプッシュボタンをクリックすると、 "on_pushButton_clicked()"関数が入力を取得します。Qt:on_pushButton_clicked()関数の入力値をpaintGL()に渡す方法
質問は、描画目的で "on_pushButton_clicked()"から "paintGL()"に入力を渡す方法について混乱しています。
私の最後の手段はこの問題を解決するためにグローバル変数を使用していますが、私は本当にそのようなことを避けたいです...誰かがより良いアプローチで啓発できれば歓迎すべきことはありません。以下のように
私のコードは、次のとおり
mainwindow.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
mainwindow.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)
{
}
感謝:)
...かかわらず、全く意味をなさない型Tの
toDouble
を呼び出しているのでAdditionaly、あなたのテンプレート機能を修正したいです。そして 'MainWindow'は' GLwidget'の存在をどのように認識していますか?最後に、より現代的なAPIであり、他のウィジェットとの相互運用性が向上しているので、 'QOpenGLWidget'を使うべきです。 –