Urim_XXL 2023-03-30 10:37 采纳率: 50%
浏览 16
已结题

关于写qt c++遇到的问题

写qt c++时遇到的问题

目的是写一个从目标地址下载图片的软件
代码在connect那一行出问题了
按钮clicked事件本来写的是&QPushButton::clicked,但是看到example中的http项目里面用的是&QAbstractButton::clicked,于是随示例更正了,
但是问题还是没有解决

代码如下:

//imageDownloader.h

#ifndef IMAGEDOWNLOADER_H
#define IMAGEDOWNLOADER_H

#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QFile>
#include <QLineEdit>
#include <QPushButton>

QT_BEGIN_NAMESPACE
namespace Ui { class imageDownloader; }
QT_END_NAMESPACE

class imageDownloader : public QWidget
{
    Q_OBJECT

public:
    imageDownloader(QWidget *parent = nullptr);
    ~imageDownloader();

private slots:
    void DownloadImageAynsc(const QUrl &ImageUrl);
    void StartDownload();

private:
    Ui::imageDownloader *ui;
    QLineEdit *urlLineEdit;
    QPushButton *StartBt;
};
#endif // IMAGEDOWNLOADER_H

//imageDownloader.cpp

#include "imageDownloader.h"
#include "ui_imagedownloader.h"

imageDownloader::imageDownloader(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::imageDownloader)
    , urlLineEdit(ui->urlLineEdit)
    , StartBt(ui->StartButton)
{
    ui->setupUi(this);
    connect(StartBt,&QAbstractButton::clicked,this,&imageDownloader::StartDownload);
}

imageDownloader::~imageDownloader()
{
    delete ui;
}

void imageDownloader::StartDownload(){
    QUrl *imageUrl = new QUrl(this->urlLineEdit->text());
    DownloadImageAynsc(*imageUrl);
}

void imageDownloader::DownloadImageAynsc(const QUrl &ImageUrl){
    // 创建QNetworkAccessManager实例
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);

    // 创建下载请求
    QNetworkRequest request(ImageUrl);

    // 发送下载请求
    QNetworkReply *reply = manager->get(request);

    // 监听下载进度和完成事件
    connect(reply, &QNetworkReply::downloadProgress ,[=](qint64 bytesReceived, qint64 bytesTotal) {
        // 更新下载进度
        // 可以在此处更新进度条或其他UI元素
        qDebug() << bytesReceived << "/" << bytesTotal << endl;
    });

    connect(reply, &QNetworkReply::finished ,[=]() {
        // 下载完成,检查是否有错误
        if (reply->error() == QNetworkReply::NoError) {
            // 保存下载的图片到本地文件
            QFile file("image.jpg");
            if (file.open(QIODevice::WriteOnly)) {
                file.write(reply->readAll());
                file.close();
            }
        } else {
            // 处理下载错误
            qDebug() << "Download failed: " << reply->errorString();
        }

        // 删除QNetworkReply实例
        reply->deleteLater();
    });

}


img

问题似乎是出在这了,有无hxd帮我看看

  • 写回答

2条回答 默认 最新

  • mideum 2023-03-30 11:00
    关注

    写&QPushButton::clicked或者&QAbstractButton::clicked都可以没有区别,是StartBt的值有问题,你赋值太早了,ui->setupUI(this)还没有调用以前ui->startButton的值还是无效的
    同样你urlLineEdit也有这个问题,而且这两个变量没有存在的必要啊,使用时候就用ui->startButton和ui->urlLineEdit就可以了,干嘛还另外存两个指针

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效