Qt多窗口的问题我实现一个简单的QQ,双击好友图标出来一个聊天对话框,现在问题是怎么样实现同时打开几个聊
Qt多窗口的问题 我实现一个简单的QQ,双击好友图标出来一个聊天对话框,现在问题是怎么样实现同时打开几个聊天对话框? 我现在是这样做的:
C/C++ codeclass BuddyGroupList{ //…… ChatDialog *aChat; //……};// 这是一个slots,双击好友图标响执行它void BuddyGroupList::openChatDialog(){ aChat = new ChatDialog(); aChat->show();} 这样就只有一个指针,虽然每次双击都能弹出聊天窗口并显示,但每次双击都用new创建一个窗口,都占用了aChat这一个指针,那之前那些窗口不是没有指针指向它们了吗? 这样不是会引起内存泄漏吗?这些窗口都是独立的窗口,没有parent。
怎么样才能不引起内存泄漏呢?
还能用什么办法实现这个多窗口聊天功能呢?
[解决办法] 可以记录这个指针变量是有分配过 实例,有就先释放在new
if(beExist)
delete aChat;
beExist = true;
aChat = new ChatDialog();
aChat->show();
[解决办法] 。。。定义多个对话框指针,比如20个,超过20个就提示用户窗口过多。谁有三头六臂可以跟20个人同时聊天么!
[解决办法] 你看C++ GUI with QT4编程,中文版第56页,有类似于你的问题。
为了防止memory leaking,人家the solution is to set the Qt::WA_DeleteOnClose attribute in the constructor.
就是在对话框的构造函数中添加 setAttribute(Qt::WA_DeleteOnClose);
好了,给分吧
[解决办法] 只用一个ChatDialog *aChat;指向所有的聊天窗口这样肯定是不行的。
如果是我,我会这样写。
class chat 封装一个聊天会话
class ChatDialog 封装用于显示一个对话的聊天窗口
每个chat保存一个指向ChatDialog的指针
保存一个chat的链表。
当结束和一个人的聊天时,删除一个chat,顺带删除这个chat带的ChatDialog(如果有)
[解决办法] 设置setAttribute(Qt::WA_DeleteOnClose);
然后每当创建一个aChat = new ChatDialog();就用QWidget::winId ()保存其WId,之后你
要使用窗口的时候直接 QWidget::find ( WId )返回窗口指针,即可使用
[解决办法] 探讨 只用一个ChatDialog *aChat;指向所有的聊天窗口这样肯定是不行的。 如果是我,我会这样写。 class chat 封装一个聊天会话 class ChatDialog 封装用于显示一个对话的聊天窗口 每个chat保存一个指向ChatDialog的指针 保存一个chat的链表。 当结束和一个人的聊天时,删除一个chat,顺带删除这个chat带的ChatD……[解决办法] 探讨 引用: 只用一个ChatDialog *aChat;指向所有的聊天窗口这样肯定是不行的。 如果是我,我会这样写。 class chat 封装一个聊天会话 class ChatDialog 封装用于显示一个对话的聊天窗口 每个chat保存一个指向ChatDialog的指针 保存一个chat的链表。 当结束和一个人的聊天时,删除一个……[解决办法] 用Qt::WA_DeleteOnClose true 是最简单的方法了。。
此外你还可以用 QList<ChatDialog *> List 来管理你的所有ChatDialog。这样,你可以在ChatDialog的构造函数中调用List.append(this)来向List添加本窗口,在析构函数中调用list.remove(this),从List中移除本窗口,从而很好的方便的灵活的管理你的窗口。。
此外你还可以用 QPointer<ChatDialog> point ,指针来接管你的ChatDialog * 指针,从而用
QList<QPointer<ChatDialog> >List来管理你的窗口,该方法更加强大,保证不会出现野指针问题。