Qt相关问题

本文介绍了在Qt应用中如何正确实现登录注销功能,确保每个用户看到的都是全新界面,同时强调了析构函数中处理指针的重要性,避免野指针导致的内存问题。通过设置WA_DeleteOnClose属性,确保窗口关闭后内存被释放。此外,还提醒开发者在声明指针时应初始化为 nullptr,以防止析构时释放未实例化的对象。
摘要由CSDN通过智能技术生成

一、注销登录功能的实现

在做有登录界面的应用时,经常会用到需要在操作界面注销然后返回登录界面的功能。

普通的close和hide方法有一个弊端,即会保存操作界面的状态,主界面在close(实际上qt内调用close时仍调用的是hide,不过会多发一个closeevent的信号)之后再show会保持上个用户的操作(其实就是还是原来的界面),而不是重新刷新界面。

为了满足不同用户登录看到的都是全新的界面,可以在窗口的构造函数内添加:

this->setAttribute(Qt::WA_DeleteOnClose,true);//使用时记得加头文件<Qt>

这段代码的作用就是使用户在调用close函数后释放掉窗口的内存,这样下个用户登录的时候我们再new一个新窗口出来即可,同时保证不会使得程序运行时占用的内存越来越大。

二、析构函数野指针问题

我在做析构函数的时候习惯先判断一下指针是否为空,如下:

SendWindow::~SendWindow()
{
    delete ui;
    if(this->client_com_object_ != nullptr){
        delete client_com_object_;
        client_com_object_ = nullptr;
    }
}

但是我的指针在头文件定义的时候没有赋初值,导致在类内没有实例化指针对应的对象的话,类在析构的时候释放的是野指针对应的内存,有类似问题的可以注意一下。

在对指针声明时初始化为空:

private:
    Ui::SendWindow *ui;
    ComProtocol *client_com_object_ = nullptr;

-----------------------------------------------------------------------

(更新线)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值