Неправильное использование пользовательского интерфейса
Я студент-программист, и я занимаюсь программированием 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;
}
Извините за длинные имена; будучи студентом, я обнаружил, что мне нужно использовать гораздо больше описания против аббревиатуры. Потому что я не уверен, в чем проблема, я не уверен, насколько важен мой код. Пожалуйста, не оставляйте отрицательные комментарии или пометьте этот вопрос как несущественный. Просто дайте мне знать, что вы хотели бы увидеть, и я добавлю еще. Вот мой заголовок:
#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 ответ
Вам нужно только удалить текст "InjectionDialog" и разыменовать элементы пользовательского интерфейса напрямую:
tempStrFluidVelocity = ui->lineEditFluidVelocity->text();
tempStrFluidMassFlow = ui->lineEditFluidMassFlow->text();
tempStrParticleVelocity = ui->lineEditParticleVelocity->text();
tempStrParticleMassFlow = ui->lineEditParticleMassFlow->text();