Qt Rss项目实践(1)(搭建rss)

接触Qt是很早之前的事情了,之前零零碎碎地看过一些视频教程,跟着做了一些demo,但随后就落下了。前一阵儿跟着网易云课堂的一个Qt课程重新学习了一下Qt基础,想要做一个自己的项目来练手。想过做个terminal,来弥补mac终端缺失ssh登录管理的缺陷;想过做个音乐播放器;想过做个小说爬虫客户端。不过翻来翻去,一直未找到step by step的视频教程来跟着联系。恰逢这两天找合适的rss阅读器,受到启发,不如自己试着写一下rss客户端?不错的是,在github上找到一个Qt的Rss项目 QuiteRSS<https://github.com/QuiteRSS/quiterss>,感觉还不错。不过结构过于复杂,界面功能繁多,因而考虑先做简化版本,后续逐步参考代码,补全功能。

代码目录:

Qt Rss项目实践(1)(搭建rss)

代码目录

界面布局:

Qt Rss项目实践(1)(搭建rss)

界面布局

后续在GitHub上又找到几个简单的项目:

  • Masaru82/Qt5-RSSreader00 <https://github.com/Masaru82/Qt5-RSSreader00>,
  • elanius/rss <https://github.com/elanius/rss>
  • antonybro/RSSReaderQt <https://github.com/antonybro/RSSReaderQt>

其中RSSReaderQt是现版本(macOS 10.13,Qt 5.12)能正常运行的,因而以此为原型进行测试开发。

Qt Rss项目实践(1)(搭建rss)

RSSReaderQt

该软件功能比较简单,尽管为非中文,但功能简单,也能猜出其大致含义。左侧的按钮为添加,右侧按钮为删除。点击Link之后,右侧会出现标题,点击标题,会用系统默认浏览器打开文章。实现了最基本的RSS阅读器的功能。因而接下来将以此为蓝本,进行RSS核心功能编写。

Qt Rss项目实践(1)(搭建rss)

主程序界面

Qt Rss项目实践(1)(搭建rss)

添加源界面

创建MainWindow类,继承于QMainWindow类,为主窗体界面。

添加feedModel类,继承于QStandardItemModel,用于填充Rss源列表。

  • 添加表头

void FeedModel::creatHeader(){ setHorizontalHeaderItem(0,new QStandardItem(\”名称\”)); setHorizontalHeaderItem(1,new QStandardItem(\”链接\”));}

  • 添加条目

void FeedModel::AddItem(QString name, QString link){ QList<QStandardItem*> list; QStandardItem *nameitem = new QStandardItem(name); nameitem->setData(name); QStandardItem *linkitem = new QStandardItem(link); linkitem->setData(link); list<<nameitem<<linkitem; appendRow(list);}

创建addRssSource类,继承于QDialog类,用于创建添加源窗体。

  • 获取窗体中填入的name和link,清空窗体内容。

QString addRssSource::name(){ return ui->lename->text();}QString addRssSource::link(){ return ui->lelink->text();}void addRssSource::clearcnt(){ ui->lename->clear(); ui->lelink->clear(); ui->lename->setFocus();}

绑定主窗体“添加”按钮,将对话框内容填充到Rss源。

void MainWindow::on_btnAdd_clicked(){ if(rsswin.exec()==QDialog::Accepted){ model->AddItem(rsswin.name(),rsswin.link()); rsswin.clearcnt(); }}

解析主窗体的tabview的link,并将解析内容展示在右侧tabview.

  • 创建newsModel类,并添加addItem方法。

void newsModel::addItem(QString title){ QStandardItem *titleitem=new QStandardItem(title); titleitem->setData(title); appendRow(titleitem);}

  • 解析添加的rss链接,并将标题传到右侧tabview的titleitem中。
  • 在pro文件中添加network和xml库
  • 在mainwindow.h添加QtNetwork头文件
  • 绑定左侧tableview,加载rss url参数。注意manager的初始化!未初始化无法解析数据!

manager=new QNetworkAccessManager(this);void MainWindow::on_tvRes_clicked(const QModelIndex &index){ QNetworkrequest request; request.setUrl(QUrl(feedmodel->item(index.row(),1)->data().toString())); request.setRawHeader(\”User-Agent\”,\”MyOwnBrowser 1.0\”); reply=manager->get(request); connect(reply,SIGNAL(readyRead()),this,SLOT(anarss())); connect(reply,SIGNAL(error(QNetworkReply::NetworkError)), this,SLOT(error(QNetworkReply::NetworkError)));}

  • 解析数据

void MainWindow::anarss(){ QByteArray cnt=reply->readAll(); QXmlStreamReader xmlstream; xmlstream.addData(cnt); QString titleStr,linkStr,currentTag; newsmodel->removeRows(0,1000); while (!xmlstream.atEnd()) { xmlstream.readNext(); if(xmlstream.isStartElement()){ if(xmlstream.name()==\”item\”){ titleStr.clear(); linkStr.clear(); } currentTag=xmlstream.name().toString(); }else if(xmlstream.isEndElement()){ if(xmlstream.name()==\”item\”){ newsmodel->addItem(titleStr,linkStr); titleStr.clear(); linkStr.clear(); } }else if(xmlstream.isCharacters()&&!xmlstream.isWhitespace()){ if(currentTag == \”title\”){ titleStr = xmlstream.text().toString(); }else if(currentTag == \”link\”){ linkStr = xmlstream.text().toString(); } } }}

  • 将url与系统浏览器绑定

void MainWindow::on_tvNewsList_clicked(const QModelIndex &index){ QDesktopServices::openUrl(QUrl(newsmodel->data(index,Qt::UserRole 1).toString()));}

此时核心程序已经完成。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年10月16日 上午10:48
下一篇 2022年10月16日 上午11:02

相关推荐

  • 四川大学科研项目总数四川大学科研项目总数

    四川大学科研项目总数 四川大学是中国著名的综合性大学之一,拥有着悠久的历史和丰富的文化底蕴。作为一所高水平的研究型大学,四川大学一直注重科研项目的建设和发展。近日,我们很高兴地宣布…

    科研百科 2024年9月10日
    27
  • 备件管理软件排行(备件管理软件)

    以备件管理软件:打造高效团队的工具 随着企业的发展,团队规模不断扩大,以备件管理的需求也越来越强烈。一款好的以备件管理软件可以帮助企业更好地管理以备件信息,提高团队工作效率。 以备…

    科研百科 2024年6月5日
    43
  • 创新创业结项书怎么写(创新科研项目结业报告书)

    创新科研项目结业报告书 随着科技的不断进步,创新科研项目已经成为当前学术界的热门话题。在这些项目中,研究人员通过深入研究和创新,为科学研究做出了重要的贡献。本文将介绍我们团队的一項…

    科研百科 2024年4月2日
    80
  • 开源的OA系统

    开源的OA系统:企业数字化转型的关键 随着数字化时代的到来,企业数字化转型已经成为不可避免的趋势。而OA系统(办公自动化系统)则是数字化转型中不可或缺的一部分。开源的OA系统则是近…

    科研百科 2024年10月10日
    12
  • 高密市三举措推进离退休干部党建工作档案规范化管理(离退休干部 党建)

    大众报业•大众日报客户端 2021-12-05 18:42:40 高密扎实落实《潍坊市离退休干部基层党建工作标准》,多措并举,对全市各离退休干部基层党组织党建资料档案进行统一标准、…

    科研百科 2023年3月5日
    161
  • 九江市人社局科研项目申报

    九江市人社局科研项目申报 近年来,九江市人社局一直致力于推动科技创新,促进经济发展。为了鼓励广大科研人员积极参与科技创新,九江市人社局推出一系列科研项目申报政策,为科技创新提供强有…

    科研百科 2024年8月9日
    26
  • 工程招投标与合同管理重点总结

    工程招投标与合同管理是工程管理中非常重要的环节,关系到工程的质量、时间和成本等方面。以下是工程招投标与合同管理的重点总结: 一、工程招投标 1. 招标范围和条件:招标应针对特定的工…

    科研百科 2025年1月7日
    1
  • 软件开发 项目管理(管理项目软件开发)

    管理项目软件开发 随着软件开发项目的不断发展,如何有效地管理项目软件开发变得越来越重要。软件开发项目通常需要多个方面的参与,包括开发人员、项目经理、测试人员、文档撰写人员等。因此,…

    科研百科 2024年8月31日
    29
  • “党员积分制”激发基层治理新活力(强化党员积分管理)

    抓党建促进层治理能力提升专项行动开展以来,应县臧寨乡按照“党员 积分”制管理模式,推行“三员三化”工作举措,不断提升农村党员规范化管理水平,打造高质量党员队伍,不断激活基层治理“能…

    科研百科 2023年2月4日
    156
  • 工地管理app软件哪个好(项目工地管理软件排名)

    项目工地管理软件排名 随着现代建筑行业的迅速发展,项目工地管理也越来越复杂。为了更好地管理工地,许多公司都选择使用项目工地管理软件来提高效率。本文将对目前市场上流行的项目工地管理软…

    科研百科 2024年6月5日
    94