mirror of
https://gitee.com/Zhaoxin59/my-chat_-client.git
synced 2026-02-13 16:41:48 +08:00
79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
#ifndef MESSAGESHOWAREA_H
|
||
#define MESSAGESHOWAREA_H
|
||
|
||
#include <QScrollArea>
|
||
#include <QWidget>
|
||
#include <QVBoxLayout>
|
||
#include <QScrollBar>
|
||
#include <QPushButton>
|
||
#include <QLabel>
|
||
#include <QFontMetrics>
|
||
#include <QPainter>
|
||
#include <QPainterPath>
|
||
|
||
|
||
#include "model/data.h"
|
||
#include "debug.h"
|
||
|
||
//.h文件中,不宜使用namespace xxx
|
||
using model::Message;
|
||
|
||
////////////////////////////////////////////
|
||
/// 表示消息展示区
|
||
////////////////////////////////////////////
|
||
class MessageShowArea : public QScrollArea
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
MessageShowArea();
|
||
|
||
//头插
|
||
void addFrontMessage(bool isLeft, const Message& message);
|
||
//尾插
|
||
void addMessage(bool isLeft, const Message& message);
|
||
|
||
//清空
|
||
void clear();
|
||
|
||
private:
|
||
QWidget* container;
|
||
};
|
||
|
||
////////////////////////////////////////////
|
||
/// 表示一个消息元素
|
||
/// 我们可能考虑要同时支持文本,文件,图片,视频,语音
|
||
////////////////////////////////////////////
|
||
class MessageItem : public QWidget {
|
||
public:
|
||
//isLeft表示当前的这个消息是否是左侧的消息
|
||
MessageItem(bool isLeft);
|
||
|
||
//通过工厂方法创建MessageItem实例
|
||
static MessageItem* makeMessageItem(bool isLeft, const Message& message);
|
||
|
||
//添加工厂函数
|
||
static QWidget* makeTextMessageItem(bool isLeft, const QString& message);
|
||
static QWidget* makeImageMessageItem();
|
||
static QWidget* makeFileMessageItem();
|
||
static QWidget* makeSpeechMessageItem();
|
||
|
||
private:
|
||
bool isLeft;
|
||
};
|
||
|
||
////////////////////////////////////////////
|
||
/// 创建类表示“文本消息”正文部分
|
||
////////////////////////////////////////////
|
||
class MessageContentLabel : public QWidget {
|
||
public:
|
||
MessageContentLabel(const QString& text, bool isLeft);
|
||
|
||
void paintEvent(QPaintEvent* event) override;
|
||
|
||
private:
|
||
QLabel* label;
|
||
bool isLeft;
|
||
};
|
||
|
||
#endif // MESSAGESHOWAREA_H
|