QT下的客户端与服务端:
客户端有一个登录界面,根据数据库用户表来判断登录,登录成功就显示主窗口,主窗口要实现的是:左边--目录树,显示文件夹(对文件夹及文件具有 新建 删除 重命名 复制 移动 粘贴 刷新 等功能);右边--显示文件夹里的文本文件和图片文件;在右下显示日志记录(哪个用户在什么时间进行了什么操作);
客户端首先连接上了服务端,在登录界面出现之前,通过服务端读取数据库中用户表得到用户信息,匹配用户信息,判断登录成功与否。这块已实现。
登录成功后我又需要通过服务端读数据库中的数据信息表,得到目录项的信息,用来显示目录树。(addchild)。我在登录对话框 类中有一个QTcpSocket client;在登录对话框进行了连接,并把它传给了主对话框 类,这样就只用连接一次。但是写数据,我是分开写的,登录对话框写的是“select”(客户端的第一次write)告诉服务断向数据库查询用户表并返回给客户端,在登录对话框中有一个readMessage槽函数来接受;在主对话框中我写的是“read”(客户端的第二次write)告诉服务端读数据库中的数据信息作为目录项用来增加到目录树中。在主对话框中有一个readDatas槽函数来接受,服务端的查询结果;等目录树成功显示后,用户对目录树上的目录项进行的操作被记录并把操作信息发送给服务端,(客户端的第三次write)保存到数据库中的数据信息表中。
客户端前面两次write给服务端都需要服务端返回数据,第三次write则不需要服务端返回,只需要根据信息进行相关操作(insert,update,delete)
现在我的问题是:我客户端第二次的write成功,服务端读取数据库成功,但是返回数据给客户端时,客户端的第二个readDatas槽函数总是在我初始化目录树之后才执行,所以我得不到数据。CS之间的通信顺序我弄不清啊?用断点调试也检查不出问题来,总是跳过。。
我刚开始学啊!知道自己很菜,,希望前辈们能多多指教!!!
我也知道自己语言表达不好,所以写了这么多。希望您能读明白!不要觉得我烦啊!!!谢谢各位了!
------解决方案--------------------
是要强制initTree()函数再readData()函数后执行吗?
可以设置一个标识符(bool类型),初始化为false。如果readData()正常结束,可以设为true,在initTree()函数里面进行判断是否为true,如果为true则添加树,否则直接返回。
------解决方案--------------------
先忽略什么槽函数,信号之类的,直接socket收发,客户端与服务器是否正常。