qt 文件列表_Qt Rss项目实践(5) 为Rss文章列表添加收藏按钮

本节主要内容如下:

  1. 文章列表添加收藏标志
  2. QStandItem的Role含义,data,setData,setItem方法
  3. c++ static静态变量应用

对于一些较好的文章,我们希望能做收藏标记,以便后续能回过来好好看一下。因而考虑将之前单列的文章列表新增一列为收藏列。

在qrc文件中添加收藏与取消收藏图片(starOn,starOff)

这一部分为寻常的Qt添加资源文件的方法,跳过。

在newsmodel的表头和内容第一列添加收藏图标

void newsModel::creatHeadr(){ setHorizontalHeaderItem(0,new QStandardItem(QIcon(":/images/starOff.png"),"")); setHorizontalHeaderItem(1,new QStandardItem("文章标题"));}void newsModel::addItem(QString title,QString link){ QList list; QStandardItem *star = new QStandardItem(QIcon(":/images/starOff.png"),""); star->setData(false,Qt::UserRole+1); QStandardItem *titleitem=new QStandardItem(title); titleitem->setData(link); list<
da87dc6b942feae4ab1459d365a1fc69.png

收藏图标

添加收藏与取消收藏的图标事件响应逻辑(部分完成)

目前仅加入了图标切换和收藏状态切换,设计好了外壳,接下来有待加入不同状态的响应函数,以实现具体的功能。

void newsModel::starOnOff(const QModelIndex &index){ if(this->data(index,Qt::UserRole+1).toBool()){ this->setData(index,false,Qt::UserRole+1); this->setData(index,QIcon(":/images/starOff.png"),Qt::DecorationRole); }else{ this->setData(index,true,Qt::UserRole+1); this->setData(index,QIcon(":/images/starOn.png"),Qt::DecorationRole); }}
fa05ffb59f41e0b42408824ba3a7c11a.png

收藏/取消收藏

修改tvNewsList的响应槽函数

void MainWindow::on_tvNewsList_clicked(const QModelIndex &index){ static QUrl link; switch (index.column()) { case 0: { newsmodel->starOnOff(index); break; } case 1: { link=QUrl(newsmodel->data(index,Qt::UserRole+1).toString()); webview->load(link); webview->show(); break; } default: { } }}

完成这些功能之前,被QStandItem的Role困惑了好久,最终才理清楚其含义。

2249e4138ca7dcaa5d2860c1db713d7f.png

Role

QStandItem对应于列表的某个单元格,其可以有多个属性,比如可以有图片,可以有背景颜色,字体颜色,鼠标悬浮时提示字,是否可以拖动,是否可以修改,以及支持自定义操作。而在我们初始化的时候,通过调用不同初始化函数,可以赋予不同的特征。

QStandardItem(QIcon(":/images/starOff.png"),"");

比如上面,通过QIcon的方式初始化,则会自动将其角色分配给Qt::DecorationRole.

同时,也可以通过setData方法修改其他属性,但是这里需要指定Role。构造函数中因为已经声明了参数类型,因而向QIcon这类的变量可以自动赋予角色。但是setData中数据参数为QVariant类型,无法自动检查,因而需要在后面指定Role.

对于用户想要自定义的属性,可以通过UserRole+n的形式追加。

star->setData(false,Qt::UserRole+1);

比如这里,我需要标记收藏图标的状态,即收藏/未收藏,因而为该item设置bool属性,同时指定自定义角色Qt::UserRole+1.

后续再切换收藏状态时,切换该属性,并更改该item显示的图片。

this->setData(index,false,Qt::UserRole+1);this->setData(index,QIcon(":/images/starOff.png"),Qt::DecorationRole);

再次强调,调用setData需要指定Role参数,否则会调用默认角色,常常输错。

类似地,data方法则用来取出item的数据,通过指定Role来获得对应的属性。

c++ static 静态变量设置

静态变量的设置用于将变量的作用域提升。函数内设置静态变量可以用于保存函数运行的上一次状态参数,方便追溯。

static QUrl link;

能够保存每一次访问link的记录。

项目演示视频

项目地址:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值