qt使用connect时,传入了空指针

本文介绍了一个使用Qt编写的简易计算器程序中出现的问题及其解决方法。主要问题是点击部分数字按钮时,无法在LineEdit中显示数字。原因是初始化时按钮尚未创建导致使用了空指针。文章详细解释了解决方案并给出了正确的代码顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

项目场景:通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值