2

私は学生プログラマーで、会社で GUI プログラミングを行っています。最近、支援が必要だと感じる問題に遭遇しました。私はQtを使用していますが、そのウィジェットのいくつかはまだ私を混乱させており、ドキュメントは有益ですが、学生を混乱させることがあります(問題を深く掘り下げて問題を見落としていないことを願っています)。私が受け取っているビルドの問題は、メンバー関数 checkData での Ui の使用にあります。ご想像のとおり、インターフェイスに入力されたデータを検証し、エラー メッセージを表示するか、データを収集しようとしています。クラス QString の toDouble 関数を使用して入力を評価しています。この関数は、入力が toDouble(bool &worksornot) の bool パラメーターによって変換できるかどうかを識別します。DOuble に変換する前に、Ui の lineEdit フィールド パースペクティブからテキストを取り込みます。これが私の問題があるようです。ただし、ドキュメントによると、これは機能する必要があります。しかし、常に面白い言葉である必要があります。私のcheckData関数のコードは次のとおりです。

void InjectionDialog::checkData()
{
        bool validateFluidVelocity;
        QString tempStrFluidVelocity;
        tempStrFluidVelocity = ui->InjectionDialog.lineEditFluidVelocity->text();
        double convertedFluidVelocity = tempStrFluidVelocity.toDouble(&validateFluidVelocity);
                if (validateFluidVelocity == false)
        {
            QErrorMessage validateErrorFluidVelocityError;
            validateErrorFluidVelocityError.showMessage("Fluid velocity input is invalid");
            validateErrorFluidVelocityError.exec();
        }
                else
                {
                    transData.lineEditFluidVelocity = convertedFluidVelocity;
                }
        bool validateFluidMassFlow;
        QString tempStrFluidMassFlow;
        tempStrFluidMassFlow = ui->InjectionDialog.lineEditFluidMassFlow->text();
        double convertedFluidMassFlow = tempStrFluidMassFlow.toDouble(&validateFluidMassFlow);
                if (validateFluidMassFlow == false)
        {
        QErrorMessage validateErrorFluidMassFlowError;
        validateErrorFluidMassFlowError.showMessage("Fluid mass flow input is invalid");
        validateErrorFluidMassFlowError.exec();
        }
                else
                {
                    transData.lineEditFluidMassFlow = convertedFluidMassFlow;
                }
        bool validateParticleVelocity;
        QString tempStrParticleVelocity;
        tempStrParticleVelocity = ui->InjectionDialog.lineEditParticleVelocity->text();
        double convertedParticleVelocity = tempStrParticleVelocity.toDouble(&validateParticleVelocity);
                if (validateParticleVelocity == false)
        {
        QErrorMessage validateErrorParticleVelocity;
        validateErrorParticleVelocity.showMessage("Particle velocity input is invalid");
        validateErrorParticleVelocity.exec();
        }
                else
                {
                    transData.lineEditParitcleVelocity =convertedParticleVelocity;
                }
        bool validateParticleMassFlow;
        QString tempStrParticleMassFlow;
        tempStrParticleMassFlow = ui->InjectionDialog.lineEditParticleMassFlow->text();
        double convertedParticleMassFlow = tempStrParticleMassFlow.toDouble(&validateParticleMassFlow);
                if (validateParticleMassFlow == false)
        {
        QErrorMessage validateErrorParticleMassFlow;
        validateErrorParticleMassFlow.showMessage("Particle mass flow input is invalid");
        validateErrorParticleMassFlow.exec();
        }
                else
                {
                    transData.lineEditParticleMassFlow = convertedParticleMassFlow;
                }

長い名前で申し訳ありません。学生として、私は略語よりも多くの説明を使用する必要があることに気付きました. 何が問題なのかわからないので、自分のコードがどれだけ関連しているかわかりません。否定的なコメントを残したり、この質問を実質的でないものとしてマークしたりしないでください。見たいものを教えてください。さらに追加します。Heres 私の注入ダイアログ ヘッダー:

#ifndef INJECTIONDIALOG_H
#define INJECTIONDIALOG_H
#include "injectiondata.h"

#include <QDialog>

namespace Ui {
class InjectionDialog;
}

class InjectionDialog : public QDialog
{
    Q_OBJECT

public:
    void setData(InjectionData &name);
    explicit InjectionDialog(QWidget *parent = 0);
    ~InjectionDialog();

private:
    InjectionData transData;
    Ui::InjectionDialog *ui;

private slots:
    void checkData();
    void checkFluidVelocity();
};

#endif // INJECTIONDIALOG_H

私が受け取った正確なエラーは、「Ui::InjectionDialog」の無効な使用であり、これは次の場所で発生します

tempStrFluidVelocity = ui->InjectionDialog.lineEditFluidVelocity->text();
tempStrFluidMassFlow = ui->InjectionDialog.lineEditFluidMassFlow->text();
tempStrParticleVelocity = ui->InjectionDialog.lineEditParticleVelocity->text();
tempStrParticleMassFlow = ui->InjectionDialog.lineEditParticleMassFlow->text();

あなたが私に与えることができる助けを前もって感謝します。

4

1 に答える 1

1

「InjectionDialog」テキストを削除し、UI 要素を直接逆参照するだけで済みます。

tempStrFluidVelocity = ui->lineEditFluidVelocity->text();
tempStrFluidMassFlow = ui->lineEditFluidMassFlow->text();
tempStrParticleVelocity = ui->lineEditParticleVelocity->text();
tempStrParticleMassFlow = ui->lineEditParticleMassFlow->text();
于 2012-01-08T03:49:11.860 に答える