分享一款Qt6开发的wallhaven桌面壁纸软件

        花了两个多星期,业余时间开发了这款软件。软件是wallhaven.cc站点的桌面版。类似的软件也有。比如:Wonderwall Wallpaper Manager (在微软应用商店里就可以搜到)。wallhaven(github 上可以搜到源码)。这两款软件使用起来都比较复杂,当然功能也比较多,搜索也更灵活。由于时间和个人精力原因,软件写的比较简单,不过能搜的图片都能搜到,不能搜的也能搜(支持apikey搜索)。

软件界面:

         主界面功能:搜索框输入关键词,排序是可以根据添加日期、相关性、随机、收藏次数、浏览次数、排行榜进行排序。选中忽略动漫图片可以过滤掉关键词为anime的图片。输入apikey可以获搜索NSFW类型的图片。输入API KEY的结果:

         可以看到输入api key获取的图片为45695页,没有apikey获取的为35009页。多出来的内容是什么自己(LSP)体会。

下载功能:

        支持单个图片下载:主界面点击图片就可以下载,下载文件与DesktopPaper.exe同一目录下的download目录下。

        批量下载:支持同页图片批量下载功能。该功能支持一次性下载一页(24个)图片的功能。

其他功能: 

        其他功能就不解释了,见名知意。

           

部分源码:

        QLabel通过鼠标移动和移除事件添加tooltip,以及点击下载图片:

class ImgLabel:public QLabel{Q_OBJECTpublic:ImgLabel(QWidget *parent,const QPixmap &pixMap):QLabel(parent){this->setPixmap(pixMap);}~ImgLabel(){}protected:void mouseReleaseEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mousePressEvent(QMouseEvent *event) override;};

void ImgLabel::mouseMoveEvent(QMouseEvent *event) {QToolTip::showText(mapToGlobal(rect().topLeft()), "点击下载:"+ this->property("id").toString() + "." + this->property("url").toString().split(".").last());this->setCursor(Qt::PointingHandCursor);//this->setStyleSheet("color: red;");
}void ImgLabel::mouseReleaseEvent(QMouseEvent *event) {QToolTip::hideText();this->setCursor(Qt::ArrowCursor);//this->setStyleSheet("color: #ecf0f1;");
}void ImgLabel::mousePressEvent(QMouseEvent *event){ImgDownThread *thread = new ImgDownThread(this->parent(),this->property("id").toString(),this->property("url").toString());QObject::connect(thread, &ImgDownThread::finished, this->parent(), [thread](){thread->deleteLater();});QToolTip::showText(mapToGlobal(rect().topLeft()),"下载已创建");thread->start();
}

        由于图片下载时要实现异步。使用QThread实现多线程下载。下载功能没有使用QNetworkAccessManager。而是使用的命令行工具aria2c.exe。aria2c.exe可以作为资源文件添加到Qt的资源文件(.qrc)中。使用时拷贝到工作目录,使用QProcess调用。

        实现如下:

void ImgDownThread::run(){QProcess process;QFile executableFile(":/exe/aria2c.exe");QDir exeFilePath ("./aria2c.exe");if(!exeFilePath.exists()){executableFile.copy("./aria2c.exe");}QString type = url.split(".").last();process.setProgram("./aria2c.exe");process.setArguments({"-o",QString("./download/").append(this->id).append(".").append(type),this->url});process.start();process.waitForFinished();
}

        如果使用QNetworkAccessManager下载使用如下代码:

QNetworkAccessManager *netManager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(QUrl("http://xxx/xxx/xxx.png")); // 设置下载地址
QSslConfiguration sslConfig = request.sslConfiguration();
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); // 不进行ssl认证,https请求可能需要使用
request.setSslConfiguration(sslConfig); 
QNetworkReply *reply = this->netManager->get(request); // 发送http或https请求// 绑定请求完成的槽
QObject::connect(reply, &QNetworkReply::finished, [=](){auto data = reply->readAll();QFile file("./download/" + 文件名);if(file.open(QIODevice::WriteOnly)){ // 以wirteonly方式打开file.write(data); // 写入数据到文件file.close();}
}

        使用QNetworkAccessManager的代码需要适当修改使用。

        下载地址:

         百度网盘: walhaven-paper.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)

         提取码:c4c1

         后续会添加更多功能使程序更完善,如果还有后续的话。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部