滚动聊天布局设计
我们的聊天布局如下图
最外层的是一个chatview(黑色), chatview内部在添加一个MainLayout(蓝色),MainLayout内部添加一个scrollarea(红色),scrollarea内部包含一个widget(绿色),同时也包含一个HLayout(紫色)用来浮动显示滚动条。widget内部包含一个垂直布局Vlayout(黄色),黄色布局内部包含一个粉色的widget,widget占据拉伸比一万,保证充满整个布局。
代码实现
我们对照上面的图手写代码,在项目中添加ChatView类,然后先实现类的声明
1 | class ChatView: public QWidget |
接下来实现其函数定义, 先实现构造函数
1 | ChatView::ChatView(QWidget *parent) : QWidget(parent) |
再实现添加条目到聊天背景
1 | void ChatView::appendChatItem(QWidget *item) |
重写事件过滤器
1 | bool ChatView::eventFilter(QObject *o, QEvent *e) |
重写paintEvent支持子类绘制
1 | void ChatView::paintEvent(QPaintEvent *event) |
监听滚动区域变化的槽函数
1 | void ChatView::onVScrollBarMoved(int min, int max) |
本节先到这里,完成聊天布局基本的构造
视频链接
https://www.bilibili.com/video/BV1xz421h7Ad/?vd_source=8be9e83424c2ed2c9b2a3ed1d01385e9