C++ Qt QListWidget应用 插入指定行 设置字体颜色

2 篇文章 0 订阅

C++ Qt QListWidget应用

有大量重复、排列有序、或需动态更新的元素时,可以使用QListWidget。如展示数据表格时。尤其是在需要动态插入新数据,需要根据数据大小插入到对应位置时,此控件可以高效运作。此时可取代静态的layout+label的解决方案。常见例子:根据排名动态更新得分。

请添加图片描述

本文涉及的开发中常见问题:

  • 如何设置背景透明
  • 如何设置隐藏外部框线
  • 如何设置隐藏滚动条
  • 如何设置字体等样式
  • 如何在指定位置插入

1.创建并添加内容

如果使用C++代码创建QListWidget,需包含头文件

#include <QListWidget>
QListWidget* mListWidget = new QListWidget();

QListWideget内一般为添加QLabel等以文字图片等简单内容的控件,添加QLabel或其它继承QWidget类的自定义控件参考方法一;添加文本可参考方法二。方法一更通用,且可以实现更多效果,方法二在仅添加文字内容时更简单

1.1方法一

  • 将新内容添加至表尾

    QLabel* label=new QLabel("啊吧啊吧");
    QListWidgetItem* item = new QListWidgetItem(mListWidget);
    mListWidget->setItemWidget(item,label);
    

    在创建对象时指定了父节点为QListWidget,这时会自动将其添加至表尾,无需再额外使用mListWidget->addItem(item);如没有设置父节点则需要使用,且需先addItem再setItemWidget

    QLabel或其它控件需为指针类型,使用QLabel label,然后setItemWidget(item,&label)虽然也可以通过编译,但若该内容为局部变量,其生命周期结束后将无法再被引用,极易引发异常,强烈不建议使用。

  • 将新内容插入至指定行

    QLabel* label=new QLabel("啊吧啊吧");
    QListWidgetItem* item = new QListWidgetItem();
    mListWidget->insertItem(row, item);
    mListWidget->setItemWidget(item, label);
    

    在创建QListWidgetItem时,不要设置父节点,即()内不要加参数,否则会被立刻添加至表尾。

    必须先insertItem,再setItemWidget! 顺序不对则可能会插入空行!

之后想修改内容,可直接修改label。
若label指针与item指针没有保存,则可通过mListWidget->item(row)获取第row+1行的QListWidgetItem,
通过QWidget* pCurWiget = mListWidget->itemWidget(mListWidget->item(row))获取item对应的QWidget

1.2 方法二

  • 将新内容添加至表尾

    QListWidgetItem* item = new QListWidgetItem(mListWidget);
    mListWidget->setItemWidget(item,"啊吧啊吧");
    

​ 不创建QLabel,直接以字符串创建item,此种方式适用于只显示文本信息的情况

  • 将新内容插入至指定行

    listWidget->insertItem(row,"啊吧啊吧");
    

​ 这种方式插入只需一行代码。

2.设置属性

实例化后即可对其一些基本属性进行设置。可参考QtDesigner可视化设计时右侧的属性列表,下面介绍常用的属性

  • font 字体 直接setFont对QListWidget设定字体,优先级低于stylesheet

    QFont font(QStringLiteral("HGHT_CNKI"), 18);
    mListWidget->setFont(font);
    
  • stylesheet样式表

    在designer中直接设置即可,在代码中使用需改为字符串格式,然后setStyleSheet

    QString style;
    listWidget->setStyleSheet(style);
    
    • 设置背景透明 这样使整个控件背景透明,而不再是白色背景色

      QListWidget{background-color:transparent;}
      
    • 设置行间距 本质是设置QListWidgetItem的样式,不过可以直接在QListWidget的样式表中设置

      QListWidget::Item{ padding-top:3px; padding-bottom:3px; height:49px;}
      
    • 设置字体 如果是用方法一创建的对象,那么可以直接设置对应的样式表,如item用的是QLabel的话,只需如下设定就可以应用到QListWidget的所有子QLabel控件 ,且可直接设置文本颜色

      QLabel{font: 18pt "华光黑体_CNKI";color: rgb(255, 255, 255);}
      

      如果是用方法二创建的,那么可以用上述类似方法字体,但文字颜色需要使用如下代码设置

      listWidget->item(row)->setTextColor(QColor);
      
  • 设置隐藏框线

    listWidget->setFrameShape(QListWidget::NoFrame);
    
  • 设置隐藏滚动条并禁用滚动功能

    //隐藏滚动条
    listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //禁止鼠标选择item
    listWidget->setSelectionMode(QAbstractItemView::NoSelection);
    //设置如下代码后可隐藏第一个框框,可自行查看不设置的情况
    listWidget->setDisabled(true);
    
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值