QObject::connect()错误.应用程序崩溃.无构建错误
Error with QObject::connect(). Application Crashes. No build Error
我想做一个计算器应用程序做简单的计算。它在构建时不显示任何错误,但在运行时崩溃程序意外结束。desktop_qt_5_4_2_mingw_32bit2 - debug debugcalc.exe crash
calculator.h
#ifndef CALCULATOR
#define CALCULATOR
#include <QWidget>
class calculator : public QObject
{
Q_OBJECT
public:
calculator ( QWidget *parent=0);
int value=0;
private slots:
void setValue(int);
};
#endif // CALCULATOR
calculator.cpp
#include <QWidget>
#include <calculator.h>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
calculator::calculator(QWidget *parent)
{
QWidget *window = new QWidget;
QPushButton *add = new QPushButton;
add->setText("+");
QPushButton *sub = new QPushButton;
sub->setText("-");
QPushButton *mul = new QPushButton;
mul->setText("*");
QPushButton *div = new QPushButton;
div->setText("/");
QPushButton *enter = new QPushButton;
enter->setText("enter");
QLineEdit *disp = new QLineEdit(parent);
QGridLayout *layout = new QGridLayout;
layout->addWidget(disp,0,0,0);
layout->addWidget(add,1,0,0);
layout->addWidget(sub,1,1,0);
layout->addWidget(mul,1,2,0);
layout->addWidget(div,1,3,0);
layout->addWidget(enter,2,0,0);
window->setLayout(layout);
window->show();
calculator field1, field2, result;
connect(add,SIGNAL(clicked()),&field1,SLOT((calculator::setValue(disp->text().toInt()))));
disp->clear();
connect(enter,SIGNAL(clicked()),&field2,SLOT(calculator::setValue(disp->text().toInt())));
result.value=field1.value+field2.value;
disp->setText(QString::number(result.value));
}
void calculator::setValue(int val)
{
value=val;
}
main.cpp
#include <QApplication>
#include <calculator.h>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
calculator cal;
return app.exec();
}
您将信号连接到堆栈上对象的插槽:
calculator field1, field2, result;
connect(add,SIGNAL(clicked()),&field1,SLOT((calculator::setValue(disp->text().toInt()))));
所以当这个槽被调用时对象已经销毁了。而不是创建新的计算器对象,你应该连接到这个插槽:
connect(add,SIGNAL(clicked()),this,SLOT(setValue()));
请注意,对于无参数的信号,您需要有无参数的插槽。所以对于你想处理的每个小部件,如果它们有不同的行为,你需要创建不同的插槽。
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- 防止在C++中选择错误文件时提升 xml 解析器崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- cv::namedWindow() 崩溃,分段错误
- 由于指针算法错误,代码在 memcpy 中崩溃
- python-clang 崩溃并出现分段错误
- Android (ART) 崩溃并显示错误 JNI 在应用程序中检测到错误:jstring 是无效的本地引用
- C++如果调用 vector,矢量分割错误会导致崩溃
- libcurl curl_easy_perform崩溃(分段错误)c++
- C++ rezing 动态数组最多可以处理一定数量的元素,但在某些时候会崩溃并显示错误 (0XC0000005)
- 从转码示例中使用时,比例过滤器会带有错误崩溃
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- 函数和指针帮助:程序生成,但崩溃,没有任何特定错误
- React 本机 0.59 应用程序崩溃并出现 libc 错误
- 为什么输出错误崩溃
- 如何调试 gRPC 服务器崩溃而没有任何错误
- 如果ConstexPR编译了错误分支的时间崩溃
- 添加MFC到现有的Win32 c++导致错误/崩溃