问题是当运行应用程序时,会出现一条消息来关闭应用程序而不会澄清问题的原因。
该应用程序是一个简单的计算器,以添加两个数字
此应用程序包含六个GUI对象
两个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
答案 0 :(得分:0)
您的代码中没有崩溃的错误。它运行得很好。您的问题是陈旧对象文件的一个相当经典的结果,它不再与代码匹配。从moc_calculator.cpp
生成的代码是陈旧的。你是如何构建项目的:手动或使用make / qmake?如果您使用make / qmake或make / cmake(例如,来自Qt Creator),请执行以下操作:
完全删除构建目录(您将在源代码上方找到一个目录)。
重建。
有一个功能性错误,不会导致崩溃,只是在不当行为中。也许这甚至是一个错字。而不是resultLabel->setText("outResult");
,你想要
resultLabel->setText(outResult);