Ошибка выполнения при запуске приложения, и причиной является Qlable

Проблема заключается в том, что при запуске приложения появляется сообщение о закрытии приложения без выяснения причины проблемы.

Приложение представляет собой простой калькулятор для сложения двух чисел.
Это приложение содержит шесть объектов графического интерфейса.
Два QSpinBox ввести цифры.
Три Qlabel, два Qlabel для отображения +, = и еще один, чтобы вывести результат сложения двух чисел, and this object is the reason of the problem,
Наконец, один QPushButton чтобы отобразить результат в Qlabel,

Теперь пришло время отобразить код:
У меня три файла (main.cpp, calculator.h, calculator.cpp).

— Main.cpp —

#include "calculat.h"
int main(int argc, char *argv[]){
QApplication app(argc, argv);

Calculator calc;
calc.show();

return app.exec();
}

— calculator.h —

#ifndef CALCULATOR_H
#define CALCULATOR_H

#include <QWidget>

class QSpinBox;
class QLabel;

class Calculator : public QWidget {
Q_OBJECT
public:
Calculator();

private slots:
void on_addNumber_clicked();

public:
QSpinBox *firstValueSpinBox;
QSpinBox *secondValueSpinBox;
QLabel *resultLabel;
};

#endif // CALCULATOR_H

— calculator.cpp —

#include "calculator.h"#include <QPushButton>
#include <QSpinBox>
#include <QLabel>
#include <QHBoxLayout>

Calculator::Calculator(){
QPushButton *addButton = new QPushButton("Add");
firstValueSpinBox = new QSpinBox();
secondValueSpinBox = new QSpinBox();
resultLabel = new QLabel();
QLabel *addLabel = new QLabel("+");
QLabel *equalLabel = new QLabel("=");

connect(addButton, SIGNAL(clicked()), this, SLOT(on_addNumber_clicked()));

QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(firstValueSpinBox);
layout->addWidget(addLabel);
layout->addWidget(secondValueSpinBox);
layout->addWidget(addButton);
layout->addWidget(equalLabel);
layout->addWidget(resultLabel);
}

void Calculator::on_addNumber_clicked(){
int num = this->firstValueSpinBox->value();
int num2 = this->secondValueSpinBox->value();
QString outResult = QString::number(num + num2);
resultLabel->setText(outResult);       //<< the problem here
}

Я сомневаюсь в этой строке:

resultLabel->setText(outResult);

При удалении этой предыдущей строки приложение работает нормально.
Вывод, проблема в этом Qlabel объект, который отвечает за отображение окончательного результата.

QLabel *resultLabel; // declaration in calculator.h

resultLabel->setText(outResult); // in calculator.cpp

1

Решение

В вашем коде нет ошибок, приводящих к сбою. Работает просто отлично. Ваша проблема — довольно классический результат устаревших объектных файлов, которые больше не соответствуют коду. Код, сгенерированный из moc_calculator.cpp устарел Как вы строите проект: вручную или с помощью make / qmake? Если вы используете make / qmake или make / cmake (скажем, из Qt Creator), сделайте следующее:

  1. Полностью удалите каталог сборки (вы найдете его на один каталог выше исходного кода).

  2. Перестроить.

Есть функциональная ошибка, которая не приводит к сбою, просто к неправильному поведению. Может быть, это даже опечатка. Вместо resultLabel->setText("outResult");, ты хочешь

resultLabel->setText(outResult);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]