QT实现QQ界面

暑假在家闲的无事,于是花了两天时间用QT做了一个模仿QQ的界面,其实有很多中实现方法,并不难,主要时看你有没有那种决心研究下来的决心。

好了废话不多说,先看下我的效果,首先时登录界面:

然后点击登录按钮后有一个图像从左往中间滑动的的动画,为了像个正在登录的样子,给这个动画animation设置了一个监听事件,当动画完成后显示一秒下面这个界面后出现QQ好友列表界面:


以下是QQ的主界面:



然后是系统托盘图标


怎么样?如果不仔细看是不是会被这个当做真正的QQ,所以我说叫高仿咯!

那么接下来我说一下其中几个比较有意思的地方:

一.窗口靠边停放时,鼠标离开窗口会最小化

QQ在靠着显示屏的窗口停靠时如果鼠标离开窗口的范围,那么窗口就会滑动到显示屏里面,然后最小化,这个怎么实现呢?

很简单,重载void enterEvent(QEvent *e)函数,这样当鼠标的箭头离开时就可以执行相应的动画:代码如下:

void Dialog::leaveEvent(QEvent *e){


    QRect *rect = new QRect(this->pos().x(),this->pos().y(),this->width(),this->height());
    QCursor cursor;
    startX  = this->pos().x();         //获取窗口当前的位置x坐标
    startY = this->pos().y();        //获取窗口当前的位置y坐标
    animation->setStartValue(QPoint(startX,startY));
    animation->setEndValue(QPoint(g_nActScreenX,this->pos().y()));
      animation->setDuration(200);
      if(!(cursor.pos().x() > rect->topLeft().x() &&cursor.pos().y() > rect->topLeft().y() &&cursor.pos().y() < rect->bottomRight().y()) &&this->pos().x() + this->width()+ 30 > g_nActScreenX )       //g_nActScreenX 为整个显示屏的宽度
          animation->start();

     qDebug()<< "outOfWindow";
}

细心的小伙班可能会注意到我是先获取了窗口所在的矩形区域,然后判断鼠标是否在这个区域内,为什么要这么多此一举呢?这是当我点击一个按钮如果弹出菜单,就像下面这样的时候,这个时候可能是因为这个QMenu获取了鼠标的焦点,他会认为鼠标此时离开了窗口界面,会执行leaveEvent()即让窗口最小化,而事实上我此时只是点击了窗口上的按钮,并没有离开窗口:


二.QQ好友列表实现

之前看到好多地方说是QQ好友列表界面,但是他们都是用的QToolBox这个控件,那么实际用起来完全不是QQ列表那么回事。

QT是没有这样的控件的,因此如果想要用这种控件的话只有自定义控件。那么如何定义呢?我个人觉得方法很多,例如你可以用QT creator自定义这样的控件。

那么我个人采用的是QVBoxLayout(垂直布局)和widget.的setVisible(bool)函数实现的,一两句话说不清楚,反正时控件里面套控件,控件再套控件,这个得益于之前网上看到别人的一篇博客:http://blog.csdn.net/shuideyidi/article/details/30619167

整个项目难点应该就是以上两点,还是那句话,实现方法很多,我这个实现方法只是其中之一,期待能有更多的方法,欢迎大家和我交流。

整个工程我已经上传到csdn上了,欢迎大家下载:http://download.csdn.net/detail/qq_31281189/9580363


大神勿喷。。。。。。。



  • 11
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值