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 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
  • ¥15 SQL Server analysis services 服务安装失败