项目场景:
项目场景:通过qt编写一个简化版计算器,其中涉及到connect
问题描述
提示:这里描述项目中遇到的问题:
编写好相关的connect代码后,初步运行测试。发现报错如下图。
connect已经实现了点击数字按钮后lineedit会出现对应的数字但是点击右边的数字按钮毫无反应。
原因分析:
经过网上的搜索,发现是我使用了空指针。
下面给出代码
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private:
void init();
Ui::Widget *ui;
QPushButton *bt[10];
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
using std::string;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
init();
for(int i=0;i<=9;i++){
connect(bt[i],&QPushButton::clicked,[=](){
QString num(1,'0'+i);
QString now = ui->lineEdit->text();
ui->lineEdit->setText(now+num);
});
}
}
Widget::~Widget()
{
delete ui;
}
void Widget::init()
{
bt[0]=ui->bt0;
bt[1]=ui->bt1;
bt[2]=ui->bt2;
bt[3]=ui->bt3;
bt[4]=ui->bt4;
bt[5]=ui->bt5;
bt[6]=ui->bt6;
bt[7]=ui->bt7;
bt[8]=ui->bt8;
bt[9]=ui->bt9;
}
代码的大概就是在widget类里面构建一个指针数组bt,
然后在init()函数里面来实现10个数字按钮的对应。
但是在widget类的构造函数里面,我先调用了init(),这个时候ui里面的按钮还没有ui->setupUi(this)给创建出来。所以那个时候的ui->bt1~9都是空指针。所以指针数组bt在init函数后,并没有指向那些按钮。
解决方案:
将init()与ui->setupUi(this)的顺序换一下。
成功解决。
参考博客
https://blog.youkuaiyun.com/wj584652425/article/details/121824044