Files
MyChat_Client/messageeditarea.cpp
2025-05-29 21:31:28 +08:00

206 lines
7.3 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.

#include "messageeditarea.h"
MessageEditArea::MessageEditArea(QWidget *parent)
: QWidget{parent}
{
//设置必要的属性
this->setFixedHeight(250);
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
//创建垂直方向的布局管理器
QVBoxLayout* vlayout = new QVBoxLayout();
vlayout->setSpacing(0);
vlayout->setContentsMargins(0, 0, 30, 10);
this->setLayout(vlayout);
//创建水平方向的布局管理器
QHBoxLayout* hlayout = new QHBoxLayout();
hlayout->setSpacing(0);
hlayout->setContentsMargins(10, 0, 0, 0);
hlayout->setAlignment(Qt::AlignLeft | Qt::AlignTop);
vlayout->addLayout(hlayout);
//将上方的四个按钮创建好并添加到layout中
QString btnStyle = R"(QPushButton { background-color: rgb(245, 245, 245); border: none; }
QPushButton:pressed {background-color: rgb(255, 255, 255); })";
QSize btnSize(35, 35);
QSize iconSize(25, 25);
sendImageBtn = new QPushButton();
sendImageBtn->setFixedSize(btnSize);
sendImageBtn->setIconSize(iconSize);
sendImageBtn->setIcon(QIcon(":/resource/image/image.png"));
sendImageBtn->setStyleSheet(btnStyle);
hlayout->addWidget(sendImageBtn);
sendFileBtn = new QPushButton();
sendFileBtn->setFixedSize(btnSize);
sendFileBtn->setIconSize(iconSize);
sendFileBtn->setIcon(QIcon(":/resource/image/file.png"));
sendFileBtn->setStyleSheet(btnStyle);
hlayout->addWidget(sendFileBtn);
sendSpeechBtn = new QPushButton();
sendSpeechBtn->setFixedSize(btnSize);
sendSpeechBtn->setIconSize(iconSize);
sendSpeechBtn->setIcon(QIcon(":/resource/image/sound.png"));
sendSpeechBtn->setStyleSheet(btnStyle);
hlayout->addWidget(sendSpeechBtn);
showHistoryBtn = new QPushButton();
showHistoryBtn->setFixedSize(btnSize);
showHistoryBtn->setIconSize(iconSize);
showHistoryBtn->setIcon(QIcon(":/resource/image/history.png"));
showHistoryBtn->setStyleSheet(btnStyle);
hlayout->addWidget(showHistoryBtn);
//添加多行编辑框
textEdit = new QPlainTextEdit();
textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
textEdit->setStyleSheet(R"( QPlainTextEdit {
color: black;
border: none;
background-color: transparent;
font-size: 14px;
padding: 10px; }
)");
textEdit->verticalScrollBar()->setStyleSheet(R"(
QScrollBar:vertical {
background-color: rgb(228, 228, 228); /* 滚动条背景透明 */
width: 6px; /* 默认宽度 */
margin: 0px 0px 0px 0px; /* 边距清零 */
}
QScrollBar::handle:vertical {
background: #CCCCCC; /* 滑块颜色(浅灰色) */
min-height: 30px; /* 滑块最小高度 */
border-radius: 3px; /* 圆角 */
}
QScrollBar::handle:vertical:hover {
background: #999999; /* 悬停时滑块颜色加深 */
width: 10px; /* 悬停时宽度增大 */
}
QScrollBar::handle:vertical:pressed {
background: #666666; /* 按下时颜色更深 */
}
QScrollBar::add-line:vertical,
QScrollBar::sub-line:vertical {
height: 0px; /* 隐藏上下箭头按钮 */
background: none;
}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical {
background: none; /* 滚动条背景区域透明 */
}
)");
vlayout->addWidget(textEdit);
//添加发送消息文本的按钮
sendTextButton = new QPushButton();
sendTextButton->setText("发送");
sendTextButton->setFixedSize(120, 40);
//仿Wechat的标准样式
sendTextButton->setStyleSheet(R"(QPushButton {
font-size: 16px;
color: rgb(7, 193, 96);
border: none;
background-color: rgb(233, 233, 233);
border-radius: 5px; }
QPushButton:hover {
background-color: rgb(210, 210, 210); }
QPushButton:pressed {
background-color: rgb(190, 190, 190); }
)");
//// 创建阴影效果
// shadowEffect = new QGraphicsDropShadowEffect;
// shadowEffect->setBlurRadius(12);
// shadowEffect->setOffset(0, 5);
// shadowEffect->setColor(QColor(0, 0, 0, 150));
// sendTextButton->setGraphicsEffect(shadowEffect);
//
//// 设置按钮样式表
// sendTextButton->setStyleSheet(R"(
// QPushButton {
// background: qlineargradient(spread:pad,
// x1:0, y1:0, x2:1, y2:0,
// stop:0 #9b59b6,
// stop:1 #8e44ad);
// border-radius: 10px;
// color: white;
// font: bold 14px;
// border: none;
// margin: 5px;
// box-shadow: 0 5px 15px rgba(0,0,0,0.3);
// }
// QPushButton:hover {
// background: qlineargradient(spread:pad,
// x1:0, y1:0, x2:1, y2:0,
// stop:0 #e67e22,
// stop:1 #d35400);
// box-shadow: 0 7px 20px rgba(0,0,0,0.4);
// }
// QPushButton:pressed {
// background: qlineargradient(spread:pad,
// x1:0, y1:0, x2:1, y2:0,
// stop:0 #e74c3c,
// stop:1 #c0392b);
// }
//)");
//
// // 连接按钮的按下和释放事件
// connect(sendTextButton, &QPushButton::pressed, [=]() {
// QPropertyAnimation* anim = new QPropertyAnimation(shadowEffect, "offset");
// anim->setDuration(100);
// anim->setStartValue(shadowEffect->offset());
// anim->setEndValue(QPointF(0, 1));
// anim->start(QAbstractAnimation::DeleteWhenStopped);
// });
//
// connect(sendTextButton, &QPushButton::released, [=]() {
// QPropertyAnimation* anim = new QPropertyAnimation(shadowEffect, "offset");
// anim->setDuration(150);
// anim->setStartValue(shadowEffect->offset());
// anim->setEndValue(QPointF(0, sendTextButton->underMouse() ? 3 : 5)); // 根据是否悬停决定最终位置
// anim->setEasingCurve(QEasingCurve::OutBack);
// anim->start(QAbstractAnimation::DeleteWhenStopped);
// });
//
// // 安装事件过滤器
// sendTextButton->installEventFilter(this);
vlayout->addWidget(sendTextButton, 0, Qt::AlignRight | Qt::AlignVCenter);
}
//bool MessageEditArea::eventFilter(QObject* obj, QEvent* event)
//{
// if (obj == sendTextButton) {
// if (event->type() == QEvent::Enter) {
// // 鼠标进入事件
// QPropertyAnimation* hoverAnim = new QPropertyAnimation(shadowEffect, "offset");
// hoverAnim->setDuration(200);
// hoverAnim->setStartValue(shadowEffect->offset());
// hoverAnim->setEndValue(QPointF(0, 3));
// hoverAnim->start(QAbstractAnimation::DeleteWhenStopped);
// return true;
// }
// else if (event->type() == QEvent::Leave) {
// // 鼠标离开事件
// QPropertyAnimation* hoverAnim = new QPropertyAnimation(shadowEffect, "offset");
// hoverAnim->setDuration(200);
// hoverAnim->setStartValue(shadowEffect->offset());
// hoverAnim->setEndValue(QPointF(0, 5));
// hoverAnim->start(QAbstractAnimation::DeleteWhenStopped);
// return true;
// }
// }
// return QObject::eventFilter(obj, event);
//}