mirror of
https://gitee.com/Zhaoxin59/my-chat_-client.git
synced 2026-02-14 09:01:50 +08:00
add sendMessage function
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user