Неправильное использование пользовательского интерфейса - PullRequest
2 голосов
/ 08 января 2012

Я студент-программист и занимаюсь программированием GUI для своей компании, и недавно я столкнулся с проблемой, с которой, мне кажется, мне нужна помощь.Я использую Qt, и некоторые из его виджетов до сих пор сбивают меня с толку, а документация информативна, но иногда сбивает с толку студента (я надеюсь, что я не смотрю вглубь проблемы и не замечаю ее).Проблема сборки, которую я получаю, заключается в использовании пользовательского интерфейса в функции-члене checkData.Как вы уже догадались, я пытаюсь проверить данные, введенные в интерфейс, и либо отобразить сообщение об ошибке, либо собрать данные.Я использую функцию toDouble класса QString для оценки ввода.Функция определяет, можно ли преобразовать входные данные с помощью параметра bool в toDouble (bool & worksornot).Перед преобразованием в DOuble я беру текст из поля lineEdit perspectivley из пользовательского интерфейса.Кажется, вот где моя проблема;однако согласно документации это ДОЛЖНО работать;Однако всегда должно было быть смешное слово.Код для моих функций 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;
                }

Извините за длинные имена;будучи студентом, я обнаружил, что мне нужно использовать гораздо больше описания против аббревиатуры.Потому что я не уверен, в чем проблема, я не уверен, насколько важен мой код.Пожалуйста, не оставляйте отрицательные комментарии или пометьте этот вопрос как несущественный.Просто дайте мне знать, что вы хотели бы увидеть, и я добавлю еще.Вот мой заголовокjectiondialog:

#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();

Заранее спасибо за любую помощь, которую вы можетедай мне.

1 Ответ

1 голос
/ 08 января 2012

Вам нужно только удалить текст «InjectionDialog» и разыменовать элементы пользовательского интерфейса напрямую:

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