update SelfInfoWidget

This commit is contained in:
xyz
2025-05-29 21:31:28 +08:00
parent beda1e32ad
commit 38f3a397fd
10 changed files with 283 additions and 44 deletions

View File

@ -1,5 +1,206 @@
#include "messageeditarea.h"
#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);
//}