QT QListWidget的添加与删除,滚动条显示或隐藏,判断是否滑到顶部或底部,并使QListWidgetItem自适应大小

2023-05-16

注意:QListWidget添加子Item时,最外层最好设置完整背景颜色,否则移入Item会自带淡蓝色背景

一、QListWidget 中使 QListWidgetItem自适应大小
父部件ListWidgetForm.cpp

void ListWidgetForm::setCard()
{
	//设置边距、间距
	ui->listStudy->setContentsMargins(0, 0, 0, 0);
	ui->listStudy->setSpacing(12);
	
	//MessageCardForm 是插入的子Item关联小部件(你自定义的)
	MessageCardForm *card = new MessageCardForm(this);

	//QListWidgetItem不能设置父组件为QListWidget,不然头插不生效,还是插到最后
    QListWidgetItem *newItem = new QListWidgetItem();
    newItem->setSizeHint(card->size());
    newItem->setFlags(Qt::NoItemFlags);

	//1.头插(ui->listStudy是QListWidget)
    ui->listStudy->insertItem(0, newItem);
    //2.尾插
    ui->listStudy->addItem(newItem);
    
    ui->listStudy->setItemWidget(newItem, card);
    //隐藏item
    //ui->listStudy->setItemHidden(newItem, true);
    m_card[card] = newItem;

    //如果需要自适应大小,需要从子部件传出大小改变的信号,
    //进而重新设置QListWidgetItem大小,达到自适应的目的
    connect(card, &MessageCardForm::sizeChange, this, [=]() {
        m_card[card]->setSizeHint(card->size());
    });
}

父部件ListWidgetForm.h

private:
	//一个小部件对应一个子Item,建议使用hash
	QMap<MessageCardForm*, QListWidgetItem*> m_card;

子部件MessageCardForm.cpp

void MessageCardForm::on_btnOpen_clicked()
{
	//子部件由于文本长度不一定,导致部件大小不一
	//所以经过调整大小后,将大小改变的信号发出
    ui->labelLongMessage->setText("百里守约");
    this->adjustSize();
    emit sizeChange();
}

二、删除一条子Item

//子部件发出删除Item信号,父部件开始删除
void ListWidgetForm::onDeleteCard()
{
    MessageCardForm *card = dynamic_cast<MessageCardForm *>(sender());
	
	//删除Item
	QListWidgetItem *widItem =  m_card[card];
    ui->listStudy->removeItemWidget(widItem);
    delete widItem;
    widItem = nullptr;

	//删除存储的键值
    QMapIterator<MessageCardForm*, QListWidgetItem*> i(m_card);
    while (i.hasNext()) {
        i.next();
        if (i.key() == card) {
            m_card.remove(i.key());
        }
    }
}

三、清空Item

void ListWidgetForm::clearItem()
{
	// 第一种写法
    QMapIterator<MessageCardForm*, QListWidgetItem*> i(m_card);
    while (i.hasNext()) {
        i.next();
        QListWidgetItem* curItem = i.value();
        ui->listStudy->removeItemWidget(curItem);
        delete curItem;
        curItem = nullptr;
        m_card.remove(i.key());
    }

	// 第二种写法,一次性拿到item指针,全局方法进行删除
	qDeleteAll(m_card.values());
	m_card.clear();
}

在item被删除时,系统也会自动删除销毁自定义子部件,不会造成内存泄漏


四、滚动条显示与隐藏

//默认显示
//隐藏水平滚动条
ui->listStudy->horizontalScrollBar()->hide();
//隐藏垂直滚动条
ui->listStudy->verticalScrollBar()->hide();

五、滚动条滚动位置

//滚到顶部
ui->listStudy->scrollToTop();
//滚到底部
ui->listStudy->scrollToBottom();

六、得到滚动条的位置

void InfoNoticeForm::init()
{
    //初始化时,连接信号
	connect(ui->listStudy->verticalScrollBar(), SIGNAL(valueChanged(int)),
            this,SLOT(onStudyValueChanged(int)));
}
void InfoNoticeForm::onStudyValueChanged(int num)
{
    if (ui->listStudy->verticalScrollBar()->minimum() == num) {
        qDebug()<<"滚动条最顶部";
    }

    if (ui->listStudy->verticalScrollBar()->maximum() == num) {
        qDebug()<<"滚动条最底部";
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT QListWidget的添加与删除,滚动条显示或隐藏,判断是否滑到顶部或底部,并使QListWidgetItem自适应大小 的相关文章

  • 树莓派安装anaconda

    树莓派安装anaconda 1 查看版本 xff1a 2 下载安装包 xff1a 3 安装 xff1a 4 查看 5 换源 xff1a 6 创建虚拟环境 7 解决部分异常问题 8 卸载 xff1a 1 查看版本 xff1a uname sp
  • QT 项目 实现基于TCP的文件服务器/客户端,支持上传和下载

    Demo xff1a 下载地址 https download csdn net download guorong520 12408371 没有csdn积分的小伙伴可以留言你的QQ邮箱 xff0c 我会发送Demo xff0c 相互交流学习
  • QT 常用setAttribute 、setWindowFlags

    文章目录 一 主界面1 窗体属性2 窗体标志 二 注意1 最大化按钮失效置灰的问题 一 主界面 1 窗体属性 span class token comment 设置为模态框 如果再设置无边框窗口 xff0c 那么模态会失效 xff0c 不会
  • QT 获取秒级、毫秒级时间戳

    一 时间戳 是指格林威治时间1970年01月01日00时00分00秒 北京时间1970年01月01日08时00分00秒 起至现在的总秒数 它的提出主要是为用户提供一份电子证据 xff0c 以证明用户的某些数据的产生时间 二 获取时间戳 秒级
  • Jenkins 执行Python脚本以及Bat(批处理)脚本

    文章目录 一 新建任务二 创建任务三 配置四 勾选参数化构建过程1 下拉框参数2 字符参数3 布尔参数4 git分支选项 五 执行脚本命令六 python文件存放路径七 配置以及构建效果图1 输入构建参数 xff0c 选中勾选框 xff0c
  • 为什么Ubuntu终端输入su会报错鉴定失败?

    Ubuntu刚刚安装上 xff0c 要输入一堆类似sudo apt install xxxxxx的命令进行装各种必须的软件 xff0c 老是打sudo很烦 xff0c 就su一下 xff0c 然后就能省略掉sudo xff0c 直接apt
  • python-gitlab API基本操作以及(下载指定文件或文件夹)

    一 使用python对gitlab进行自动化操作 1 python gitlab模块官网文档 2 gitlab官网文档 二 常用使用功能 span class token comment 1 登录gitlab span def span c
  • python 完美压缩文件夹为zip格式

    一 压缩 1 备注 xff08 1 xff09 os walk xff0c 会返回一个三元组 path xff1a 文件夹本身的地址 xff1b dirNames xff1a 该文件夹中所有目录的名字列表 xff1b fileNames x
  • 模拟执行网页接口

    一 背景 我想使用程序自动执行提交软件操作 xff0c 这时候需要通过谷歌浏览器去查看需要使用哪些请求字段等 二 实现方式 1 先在浏览器上输入账号 密码进行登录 2 打开开发者工具 3 设置浏览目录 4 然后输入相关参数 xff0c 手动
  • Python resquests使用multipart/form-data格式上传参数或文件

    参考 xff1a 井蛙不可语于海 一 需要注意的坑 在resquests中不用加上Content Type xff0c 否则请求无法成功 xff0c 它会有一个默认值 二 代码示例 span class token keyword try
  • QT Expression:_BLOCK_TYPE_IS_VALID断言错误

    一 最近使用QT xff0c 写了一个小小的Demo xff0c 在关闭窗口时总是报错 二 原因 1 Qt初始化时有两种构造方式 xff1a span class token comment xff08 1 xff09 将窗口对象定义在栈上
  • QT 解压tar.gz格式的压缩包

    一 tar gz 以 tar gz为后缀的文件是一种压缩文件 xff0c 在Linux下常见 一般情况下都是源代码的安装包 它其实是先打包成tar格式的文件 xff0c 然后利用gzip压缩技术来压缩 这两天我想在windows下去解压这种
  • QT error C2220: 警告被视为错误 - 没有生成“object”文件

    一 错误代码图 下面的代码会造成这个问题 span class token keyword void span CustomWindow span class token operator span span class token fun
  • QT 复制、粘贴系统剪贴板

    一 复制 可以复制文字 图片到系统剪贴板 xff0c 图片最好将QImage格式复制到剪贴板 xff0c QPixmap要比QImage慢 xff0c 因为QPixmap需要首先转换为QImage格式 QClipboard span cla
  • QT 最常用字符串操作

    文章目录 96 96 QString 96 96 一 查找字符串位置二 截取指定位置的字符串三 判断字符串是否含有空字符四 判断字符串是否为空值五 指定位置插入字符串六 判断是否以某个字符串开始或结尾七 删除空字符八 排序字符串九 切割字符
  • QT 计算字符串、文件md5值

    一 计算字符串md5值 xff08 1 xff09 QCryptographicHash xff0c 提供一种生成加密散列的方法 xff0c Hash叫作散列表 xff0c 也叫作哈希 xff08 2 xff09 当前支持MD4 MD5 S
  • Ubuntu系统装上了以后应该干什么?

    我列出一个Linux Ubuntu装机单 xff1a 可以直接在桌面上新建文本文档 xff0c 复制粘贴我的装机命令单 xff0c 然后文本文档后缀改成sh xff0c 再在属性里设置 允许以程序执行文件 xff0c 就可以了 装机单 xf
  • QT 创建、修改桌面快捷方式,固定任务栏快捷方式

    一 获取系统文件路径 我们用到DesktopLocation和AppDataLocation 二 创建与修改快捷方式路径 修改可以直接将创建的快捷方式覆盖到指定的路径中即可 xff08 1 xff09 桌面快捷方式 QString desk
  • QT UTF-8转GBK编码

    在Qt5中使用Unicode来存储 操作字符串 xff0c windows下是GBK编码 UTF 8 转 GBK QString appLink span class token operator 61 span span class to
  • QT 删除一周前的日志

    1 现象 本地客户端log越来越大 xff0c 写入速度也会变慢 xff0c 所以在启动时进行清理 2 日志文件名 3 代码 span class token keyword void span span class token funct

随机推荐