分享一款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_OBJECT

public:
    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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

who_am_i__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值