运行应用程序时出现运行时错误,原因是Qlabel

时间:2013-10-08 22:34:09

标签: c++ qt qt5 qlabel

问题是当运行应用程序时,会出现一条消息来关闭应用程序而不会澄清问题的原因。

该应用程序是一个简单的计算器,以添加两个数字 此应用程序包含六个GUI对象 两个QSpinBox输入数字。
三个Qlabel,两个Qlabel显示+=,另外两个用于输出添加两个数字and this object is the reason of the problem的结果。
最后,一个QPushButton将结果显示在Qlabel中。

现在,是时候显示代码了:
我有三个文件(main.cppcalculator.hcalculator.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 个答案:

答案 0 :(得分:0)

您的代码中没有崩溃的错误。它运行得很好。您的问题是陈旧对象文件的一个相当经典的结果,它不再与代码匹配。从moc_calculator.cpp生成的代码是陈旧的。你是如何构建项目的:手动或使用make / qmake?如果您使用make / qmake或make / cmake(例如,来自Qt Creator),请执行以下操作:

  1. 完全删除构建目录(您将在源代码上方找到一个目录)。

  2. 重建。

  3. 有一个功能性错误,不会导致崩溃,只是在不当行为中。也许这甚至是一个错字。而不是resultLabel->setText("outResult");,你想要

    resultLabel->setText(outResult);