add sendMessage function

This commit is contained in:
xyz
2025-06-18 18:21:23 +08:00
parent c50f574eed
commit 971ab64769
11 changed files with 319 additions and 9 deletions

View File

@ -1,5 +1,10 @@
#include "messageeditarea.h"
#include "mainwidget.h"
#include "model/datacenter.h"
#include "toast.h"
using namespace model;
MessageEditArea::MessageEditArea(QWidget *parent)
: QWidget{parent}
@ -174,13 +179,74 @@ MessageEditArea::MessageEditArea(QWidget *parent)
// sendTextButton->installEventFilter(this);
vlayout->addWidget(sendTextButton, 0, Qt::AlignRight | Qt::AlignVCenter);
//统一初始化信号槽
initSignalSlot();
}
void MessageEditArea::initSignalSlot()
{
DataCenter* dataCenter = DataCenter::getInstance();
//关联“显示历史消息窗口”信号槽
connect(showHistoryBtn, &QPushButton::clicked, this, [=]() {
HistoryMessageWidget* historyMessageWidget = new HistoryMessageWidget(this);
historyMessageWidget->exec();
});
//关联“发送文本消息”信号槽
connect(sendTextButton, &QPushButton::clicked, this, &MessageEditArea::sendTextMessage);
connect(dataCenter, &DataCenter::sendMessageDone, this, &MessageEditArea::addSelfMessage);
}
void MessageEditArea::sendTextMessage()
{
//先确认当前是否有会话被选中
DataCenter* dataCenter = DataCenter::getInstance();
if (dataCenter->getCurrentSessionId().isEmpty()) {
LOG() << "当前未选中任何会话,不发送任何消息";
//上述日志只是在开发阶段能看到,程序发布出去,就无法看到了
//因此需要让普通用户也能看到提示
Toast::showMessage("当前未选中会话,不发送任何消息");
return;
}
//获取到输入框的内容,没输入,则不做任何操作
const QString& content = textEdit->toPlainText().trimmed();
if (content.isEmpty()) {
LOG() << "输入框为空";
return;
}
//清空输入框已有的内容
textEdit->setPlainText("");
//通过网络发送数据给服务器
dataCenter->sendTextMessageAsync(dataCenter->getCurrentSessionId(), content);
}
//针对自己发送消息的操作,做处理,把自己发送的消息显示到界面上
void MessageEditArea::addSelfMessage(MessageType messageType, const QByteArray& content, const QString& extraInfo)
{
DataCenter* dataCenter = DataCenter::getInstance();
const QString& currentChatSessionId = dataCenter->getCurrentSessionId();
//构造出一个消息对象
Message message = Message::makeMessage(messageType, currentChatSessionId, *dataCenter->getMyselfsync(), content, extraInfo);
dataCenter->addMessage(message);
//把这个新的消息,显示到消息展示区
MainWidget* mainWidget = MainWidget::getInstance();
MessageShowArea* messageShowArea = mainWidget->getMessageShowArea();
messageShowArea->addMessage(false, message);
//控制消息显示区,滚动条,滚动到末尾
messageShowArea->scrollToEnd();
//发送信号,通知会话列表,更新最后一条消息
emit dataCenter->updateLastMessage(currentChatSessionId);
}