该程序使用qt作为界面设计,分为登录界面,登录后主界面,聊天界面,还有其他一些小窗口像改变密码,设置密保等。
在写程序之前,我一直觉得完全用代码写是比较好的,但在写的过程中发现用designer也是非常方便的,没有必要只用代码,特别是在设置样式表,调整绝对坐标。用代码方式设置样式表如果样式表特别多时非常烦心,vs2013下还有缩进异常,查看样式表设置效果必须重新编译,designer直接就能查看效果,代码还是拖拽各有各的好处。
这是登录界面 效果 ,登陆后主界面
登录界面使用三个widget,主widget和上半部分widget和下半部分widget。
登录后界面使用stackwidget+toolbox.使用toolbox->addItem(QWidget * w, const QString & text)函数在toolbox添加widget。使用自定义widget。widget包含两个qlabel,一个是好友昵称,另一个是个性签名。使用样式表使得每当鼠标hover,widget改变颜色。为了让widget改变颜色时label也改变颜色可以捕捉widget的enterEvent和leaveevent事件,当事件触发,qlabel同时改变颜色,离开时也同时改变颜色。
toolbox的详细使用可以参考http://my.csdn.net/qiurisuixiang。
注意:需要设置toolbox->setContentsMargins(0, 0, 0, 0)和toolbox layout里的setContentsMargins(0, 0, 0, 0)和setspaceing(0),否则各个widget会有比较大的空隙。
聊天界面
聊天主界面使用textbroewr,输入使用textedit。主要麻烦在于如何设置语音消息。开始想着语音消息用按钮,点击按钮声音播放,但textbrower无法插入按钮,按钮无法通过拖拉条上下转动,因此使用textbrower每当有语音消息到来时使用像显示超链接样显示有语音消息到来。点击超链接触发相应的slot播放声音。
播放声音使用QObject::connect(textedit, SIGNAL(anchorClicked(const QUrl)), this, SLOT(handle_sound(const QUrl))),每当点击语音消息的超链接发出anchorClicked(const QUrl)信号,触发handle_sound槽函数,信号的qurl传递语音文件的路径,handle_sound解析qurl,qurl.fileName()获取语音文件,然后使用palysound播放。