gpt4 book ai didi

c++ - 运行应用程序时出现运行时错误,原因是 Qlable

转载 作者:太空宇宙 更新时间:2023-11-04 14:01:09 30 4
gpt4 key购买 nike

问题是在运行应用程序时,会出现一条关闭应用程序的消息,但没有说明问题的原因。

该应用程序是一个简单的计算器,用于将两个数字相加。
此应用程序包含六个 GUI 对象。
两个QSpinBox输入数字。
三个Qlabel,两个Qlabel显示+=,另外一个输出两个相加的结果number, 这个对象是问题的原因
最后,一个 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();
}

-- 计算器.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

-- 计算器.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

最佳答案

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

  1. 完全删除构建目录(您会发现它位于源代码之上的一个目录)。

  2. 重建。

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

resultLabel->setText(outResult); 

关于c++ - 运行应用程序时出现运行时错误,原因是 Qlable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259713/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com