Files
MyChat_Client/messageshowarea.h
2025-06-17 18:40:02 +08:00

82 lines
1.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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();
//滚动到末尾
void scrollToEnd();
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