4

dialog.h、dialog.cpp、および dialog.ui を作成しました。ダイアログには qlineedit があり、[OK] ボタンと [キャンセル] ボタンがあります。これらの linedit 情報をメインウィンドウで使用するために別の場所に保存したいと考えています。ファイル。これが私のダイアログコードです。

#include <QtGui/QApplication>
#include "dialog.h"
#include "ui_dialog.h"

void Dialog::startplanevolume()
{
    if (xMax==0)
    {
        ui->label_17->setText("Error: Can't start, invalid \nmeasures");
    }
    else
    {
        this->accept();        
    }
}

// Define the length of the volume
void Dialog::bmprange()
{
// Getting some proprieties for the lenght of the volume
QString XMAX=ui->lineEdit->text();
xMax=XMAX.toDouble();

if (xMax==0)
{
    ui->label_17->setText("Error: invalid measures");
}
else
{
    ui->label_17->setText("Valid measures");
}
}

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

  // Control volume measures
    // Making the lineedit objects only accept numbers
    ui->lineEdit->setValidator(new QIntValidator(this));
    connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));


  // Start planevolume
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(startplanevolume()));
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(hide()));

}

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

void Dialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

mainwindow.cpp で xMax の値を使用するにはどうすればよいですか??

ここに私のdialog.hがあります

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
    class Dialog;
}

class Dialog : public QDialog {
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::Dialog *ui;
    double xMax, yMax, zMax, xMMax, yMMax, zMMax, list[6];

public slots:
    void bmprange();
    void startplanevolume();

};

#endif // DIALOG_H

これが私のmain.cppです

#include <QtGui/QApplication>

#include "planevolume.h"
#include "dialog.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Dialog *dialog= new Dialog;

    if (dialog->exec())
    {
        planevolume mainwindow;
        mainwindow.show();
        return app.exec();
    }

return 0;
}

そこで、xMax を使用して、メインウィンドウの planevolume.cpp で何かを計算したいと考えています。

4

2 に答える 2

1

xMaxの public メンバーとして宣言してそのまま使用することもできますが、より洗練されたオブジェクト指向スタイルのアプローチは、クラスの領域でDialog宣言された「getter」関数を作成することです。publicDialog

(...)
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
    double getxMax() { return xMax; }
(...)

setter次のように、クラスにも関数が必要であり、領域でplanevolumeも宣言されます。public

void setxMax(double xMax);

この関数の本体は、 の値で必要なことは何でも処理しますxMax

最後に、main()関数で次のことを行います。

if (dialog->exec())
{
    planevolume mainwindow;
    mainwindow.setxMax(dialog->getxMax());   // This passes xMax to main window
    mainwindow.show();
    return app.exec();
}

または、 asのshow()関数をオーバーロードすることもできますplanevolume

planevolume::show(double xMax)
{
  // Do whatever you want with XMax

  show();   // And call original show function
}

その場合、関数は必要なくsetter、単に呼び出します

mainwindow.show(dialog->getxMax());
于 2012-08-30T12:19:04.410 に答える
1

ダイアログでゲッター関数を作成できると思います。ダイアログを閉じた後、作成した getter 関数を使用して変数にアクセスできます。

メインウィンドウ (planvolume.cpp) にパラメーターとして渡すことができる、返された変数。

それが役立つことを願っています。

編集:

dialog.h / dialog.cpp に関数を追加します。

double Dialog::getXMax()
{
     return xMax;
}

その後、main.cpp の変数にアクセスできます。

Dialog *dialog= new Dialog;

if (dialog->exec())
{
    double xMax = dialog->getXMax();
    planevolume mainwindow;
    mainwindow.show();
    return app.exec();
}
于 2012-08-30T11:27:05.547 に答える