一、注销登录功能的实现
在做有登录界面的应用时,经常会用到需要在操作界面注销然后返回登录界面的功能。
普通的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;
-----------------------------------------------------------------------
(更新线)