当前位置: 首页 > article >正文

工厂函数与测试数据

工厂函数与测试数据

前言

在上一集我们已经完成了正文部分的绘制,那么这一集我们将会对文本消息的工厂函数的编写,以及一些工具函数,并构造测试数据以测试前几集的成果。

文本工厂函数

我们需要考虑的先是我们要传入什么样的参数?

首先要考虑我们的信息是在左还是在右,再有就是我们要传入我们要发送的文本消息。

QWidget *MessageItem::makeTextMessageItem(bool isLeft, const QString& text)
{
    MessageContentLabel* messageContentLabel = new MessageContentLabel(text, isLeft);
    return messageContentLabel;
}

工具函数

我们需要三个工具函数,一个头插,一个尾插,最后一个清空。

addMessage

尾插一条消息,找到container,把这一条消息直接插入到她的layout当中。

void MessageShowArea::addMessage(bool isLeft, const Message &message)
{
    //构造MessageItem添加到布局管理器当中
    MessageItem* messageItem = MessageItem::makeMessageItem(isLeft, message);
    container->layout()->addWidget(messageItem);
}

addFrontMessage

这个会麻烦一点,需要把container的layout获取出来,要调用layout里的insertWidget方法,放置在0号位就是头插了。

void MessageShowArea::addFrontMessage(bool isLeft, const Message &message)
{
    MessageItem* messageItem = MessageItem::makeMessageItem(isLeft, message);
    QVBoxLayout* layout = dynamic_cast<QVBoxLayout*>(container->layout());
    layout->insertWidget(0,messageItem);
}

clear

从后往前遍历清空即可,记得要delete一下哦

void MessageShowArea::clear()
{
    //从后往前遍历
    QLayout* layout = container->layout();
    for(int i = layout->count() -1; i >= 0; --i){
        QLayoutItem* item = layout->takeAt(i);
        if(item != nullptr && item->widget() != nullptr){
            delete item->widget();
        }
    }
}

构造测试数据

#if TEST_UI
    for(int i = 9527; i < 9557; ++i){
        UserInfo userInfo;
        userInfo.nickname = "狱友" + QString::number(i);
        userInfo.avatar = QIcon(":/resource/image/defaultAvatar.png");

        Message message = Message::makeMessage(TEXT_TYPE,"", userInfo, (QString("狱友id:" + QString::number(i) + "正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚")).toUtf8() , "");
        this->addMessage(true,message);
    }
    UserInfo userInfo;
    userInfo.nickname = "狱友" + QString::number(9527);
    userInfo.avatar = QIcon(":/resource/image/defaultAvatar.png");

    Message message = Message::makeMessage(TEXT_TYPE,"", userInfo, (QString("狱友id:" + QString::number(9527) + "正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚正在抠脚")).toUtf8() , "");
    this->addMessage(false,message);

#endif

可以看到我们最终呈现的结果如上。

那么这一集我们就先到这里。


http://www.kler.cn/news/357824.html

相关文章:

  • 手机中的ip地址是什么意思?可以改手机ip地址吗
  • Ansible自动化运维项目实战指南
  • SLACC Simion-based Language Agnostic Code Clones
  • Java 中 String、StringBuffer 和StringBuilder的用法及区别
  • 轻松上手青龙面板:如何在本地Linux服务器中安装和使用
  • k8s权限控制RBAC中的clusterrole serviceaccount rolebinding 有什么作用
  • Django学习(三)
  • 用大模型或者预训练模型对图片进行OCR
  • Elasticsearch是做什么的?
  • python中堆的用法
  • C++学习路线(二十)
  • 大模型~合集14
  • vue3--自定义 dialog
  • 【重学 MySQL】六十七、解锁检查约束,守护数据完整性
  • 从零开始学PHP之安装开发环境
  • Android Jetpack 之再谈 ViewModel
  • 2024全国大学生软件测试大赛-校内练习题-京东、网易(功能)
  • 3d NMDS多样性分析图 R语言
  • 微信小程序中的文件查看方法
  • Vulnhub打靶-matrix-breakout-2-morpheus