代码拉取完成,页面将自动刷新
#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); // 设置每项的固定高度
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。