Ai
1 Star 0 Fork 0

小邓/client

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
messagelistdelegate.cpp 2.13 KB
一键复制 编辑 原始数据 按行查看 历史
小邓 提交于 2024-06-22 00:08 +08:00 . 粗糙显示消息
#include "messagelistdelegate.h"
MessageListDelegate::MessageListDelegate(QObject *parent)
: QStyledItemDelegate{parent}
{
}
void MessageListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
painter->save();
// 获取消息内容、时间和发送者标志
QString message = index.data(Qt::DisplayRole).toString();
QString time = index.data(Qt::UserRole + 1).toString();
bool isSender = index.data(Qt::UserRole + 2).toBool(); // 判断是否是自己发送的消息
// 设置消息框的绘制区域
QRect messageRect;
if (isSender) {
messageRect = option.rect.adjusted(option.rect.width() / 2, 5, -10, -5); // 右侧显示
painter->setBrush(Qt::magenta); // 自己的消息使用粉色背景
} else {
messageRect = option.rect.adjusted(10, 5, -(option.rect.width() / 2), -5); // 左侧显示
painter->setBrush(Qt::cyan); // 对方的消息使用青色背景
}
// 绘制消息背景
painter->setPen(Qt::NoPen);
painter->drawRect(messageRect);
// 计算文本的绘制位置
QFontMetrics fm(painter->font()); // 获取当前字体的信息
// 计算时间文本的绘制位置,在消息框顶部正中间
QRect timeRect = QRect(messageRect.left(), messageRect.top() , messageRect.width(), fm.height());
// 计算消息文本的绘制位置,在消息框底部
QRect messageTextRect = QRect(messageRect.left(), messageRect.top() + (messageRect.height() + fm.height()) / 2, messageRect.width(), messageRect.height() - fm.height());
// 绘制时间文本
painter->setPen(Qt::darkGray); // 设置时间文本颜色为深灰色
painter->drawText(timeRect, Qt::AlignCenter, time);
// 绘制消息文本
painter->setPen(Qt::black); // 设置消息文本颜色为黑色
painter->drawText(messageTextRect.adjusted(10, 0, 0, -20), Qt::AlignLeft | Qt::AlignVCenter, message);
painter->restore();
}
QSize MessageListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {
return QSize(option.rect.width(), 60); // 设置每项的固定高度
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xiao-deng-a/client.git
git@gitee.com:xiao-deng-a/client.git
xiao-deng-a
client
client
master

搜索帮助