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

关于写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日

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器