QWebEngineDownloadRequest Class

The QWebEngineDownloadRequest class provides information about a download. More...

Header: #include <QWebEngineDownloadRequest>
CMake: find_package(Qt6 REQUIRED COMPONENTS WebEngineCore)
target_link_libraries(mytarget PRIVATE Qt6::WebEngineCore)
qmake: QT += webenginecore
In QML: WebEngineDownloadRequest
Inherits: QObject

Public Types

enum DownloadInterruptReason { NoReason, FileFailed, FileAccessDenied, FileNoSpace, FileNameTooLong, …, UserCanceled }
enum DownloadState { DownloadRequested, DownloadInProgress, DownloadCompleted, DownloadCancelled, DownloadInterrupted }
enum SavePageFormat { UnknownSaveFormat, SingleHtmlSaveFormat, CompleteHtmlSaveFormat, MimeHtmlSaveFormat }

Properties

Public Functions

QString downloadDirectory() const
QString downloadFileName() const
quint32 id() const
QWebEngineDownloadRequest::DownloadInterruptReason interruptReason() const
QString interruptReasonString() const
bool isFinished() const
bool isPaused() const
bool isSavePageDownload() const
QString mimeType() const
QWebEnginePage *page() const
qint64 receivedBytes() const
QWebEngineDownloadRequest::SavePageFormat savePageFormat() const
void setDownloadDirectory(const QString &directory)
void setDownloadFileName(const QString &fileName)
void setSavePageFormat(QWebEngineDownloadRequest::SavePageFormat format)
QWebEngineDownloadRequest::DownloadState state() const
QString suggestedFileName() const
qint64 totalBytes() const
QUrl url() const

Public Slots

void accept()
void cancel()
void pause()
void resume()

Signals

void downloadDirectoryChanged()
void downloadFileNameChanged()
void interruptReasonChanged()
void isFinishedChanged()
void isPausedChanged()
void receivedBytesChanged()
void savePageFormatChanged()
void stateChanged(QWebEngineDownloadRequest::DownloadState state)
void totalBytesChanged()

Detailed Description

QWebEngineDownloadRequest models a download throughout its life cycle, starting with a pending download request and finishing with a completed download. It can be used, for example, to get information about new downloads, to monitor progress, and to pause, resume, and cancel downloads.

Downloads are usually triggered by user interaction on a web page. It is the QWebEngineProfile's responsibility to notify the application of new download requests, which it does by emitting the downloadRequested signal together with a newly created QWebEngineDownloadRequest. The application can then examine this item and decide whether to accept it or not. A signal handler must explicitly call accept() on the item for Qt WebEngine to actually start downloading and writing data to disk. If no signal handler calls accept(), then the download request will be automatically rejected and nothing will be written to disk.

Note: Some properties, such as setting the path and file name where the file will be saved (see downloadDirectory() and downloadFileName()), can only be changed before calling accept().

Object Life Cycle

All items are guaranteed to be valid during the emission of the downloadRequested signal. If accept() is not called by any signal handler, then the item will be deleted immediately after signal emission. This means that the application must not keep references to rejected download items. It also means the application should not use a queued connection to this signal.

If accept() is called by a signal handler, then the QWebEngineProfile will take ownership of the item. However, it is safe for the application to delete the item at any time, except during the handling of the downloadRequested signal. The QWebEngineProfile being a long-lived object, it is in fact recommended that the application delete any items it is no longer interested in.

Note: Deleting an item will also automatically cancel a download since 5.12.2, but it is recommended to cancel manually before deleting for portability.

Web Page Downloads

In addition to normal file downloads, which consist simply of retrieving some raw bytes from the network and writing them to disk, Qt WebEngine also supports saving complete web pages, which involves parsing the page's HTML, downloading any dependent resources, and potentially packaging everything into a special file format (savePageFormat). To check if a download is for a file or a web page, use isSavePageDownload.

See also QWebEngineProfile, QWebEngineProfile::downloadRequested, QWebEnginePage::download, and QWebEnginePage::save.

Member Type Documentation

enum QWebEngineDownloadRequest::DownloadInterruptReason

Describes the reason why a download was interrupted:

ConstantValueDescription
QWebEngineDownloadRequest::NoReason0Unknown reason or not interrupted.
QWebEngineDownloadRequest::FileFailed1General file operation failure.
QWebEngineDownloadRequest::FileAccessDenied2The file cannot be written locally, due to access restrictions.
QWebEngineDownloadRequest::FileNoSpace3Insufficient space on the target drive.
QWebEngineDownloadRequest::FileNameTooLong5The directory or file name is too long.
QWebEngineDownloadRequest::FileTooLarge6The file size exceeds the file system limitation.
QWebEngineDownloadRequest::FileVirusInfected7The file is infected with a virus.
QWebEngineDownloadRequest::FileTransientError10Temporary problem (for example the file is in use, out of memory, or too many files are opened at once).
QWebEngineDownloadRequest::FileBlocked11The file was blocked due to local policy.
QWebEngineDownloadRequest::FileSecurityCheckFailed12An attempt to check the safety of the download failed due to unexpected reasons.
QWebEngineDownloadRequest::FileTooShort13An attempt was made to seek past the end of a file when opening a file (as part of resuming a previously interrupted download).
QWebEngineDownloadRequest::FileHashMismatch14The partial file did not match the expected hash.
QWebEngineDownloadRequest::NetworkFailed20General network failure.
QWebEngineDownloadRequest::NetworkTimeout21The network operation has timed out.
QWebEngineDownloadRequest::NetworkDisconnected22The network connection has been terminated.
QWebEngineDownloadRequest::NetworkServerDown23The server has gone down.
QWebEngineDownloadRequest::NetworkInvalidRequest24The network request was invalid (for example, the original or redirected URL is invalid, has an unsupported scheme, or is disallowed by policy).
QWebEngineDownloadRequest::ServerFailed30General server failure.
QWebEngineDownloadRequest::ServerBadContent33The server does not have the requested data.
QWebEngineDownloadRequest::ServerUnauthorized34The server did not authorize access to the resource.
QWebEngineDownloadRequest::ServerCertProblem35A problem with the server certificate occurred.
QWebEngineDownloadRequest::ServerForbidden36Access forbidden by the server.
QWebEngineDownloadRequest::ServerUnreachable37Unexpected server response (might indicate that the responding server may not be the intended server).
QWebEngineDownloadRequest::UserCanceled40The user canceled the download.

enum QWebEngineDownloadRequest::DownloadState

This enum describes the state of the download:

ConstantValueDescription
QWebEngineDownloadRequest::DownloadRequested0Download has been requested, but has not been accepted yet.
QWebEngineDownloadRequest::DownloadInProgress1Download is in progress.
QWebEngineDownloadRequest::DownloadCompleted2Download completed successfully.
QWebEngineDownloadRequest::DownloadCancelled3Download has been cancelled.
QWebEngineDownloadRequest::DownloadInterrupted4Download has been interrupted (by the server or because of lost connectivity).

enum QWebEngineDownloadRequest::SavePageFormat

This enum describes the format that is used to save a web page.

ConstantValueDescription
QWebEngineDownloadRequest::UnknownSaveFormat-1This is not a request for downloading a complete web page.
QWebEngineDownloadRequest::SingleHtmlSaveFormat0The page is saved as a single HTML page. Resources such as images are not saved.
QWebEngineDownloadRequest::CompleteHtmlSaveFormat1The page is saved as a complete HTML page, for example a directory containing the single HTML page and the resources.
QWebEngineDownloadRequest::MimeHtmlSaveFormat2The page is saved as a complete web page in the MIME HTML format.

Property Documentation

[read-only] isFinished : const bool

This property holds whether this download is finished (completed, cancelled, or non-resumable interrupted state).

Access functions:

bool isFinished() const

Notifier signal:

void isFinishedChanged()

See also state().

[read-only] isPaused : const bool

This property holds whether this download is paused.

Access functions:

bool isPaused() const

Notifier signal:

See also pause() and resume().

Member Function Documentation

[slot] void QWebEngineDownloadRequest::accept()

Accepts the current download request, which will start the download.

If the item is in the DownloadRequested state, then it will transition into the DownloadInProgress state and the downloading will begin. If the item is in any other state, then nothing will happen.

See also isFinished and stateChanged().

[slot] void QWebEngineDownloadRequest::cancel()

Cancels the current download.

If the item is in the DownloadInProgress state, then it will transition into the DownloadCancelled state, the downloading will stop, and partially downloaded files will be deleted from disk.

If the item is in the DownloadCompleted state, then nothing will happen. If the item is in any other state, then it will transition into the DownloadCancelled state without further effect.

See also isFinished and stateChanged().

QString QWebEngineDownloadRequest::downloadDirectory() const

Returns the download directory path.

Note: Getter function for property downloadDirectory.

See also setDownloadDirectory().

QString QWebEngineDownloadRequest::downloadFileName() const

Returns the file name to download the file to.

Note: Getter function for property downloadFileName.

See also setDownloadFileName().

quint32 QWebEngineDownloadRequest::id() const

Returns the download item's ID.

Note: Getter function for property id.

QWebEngineDownloadRequest::DownloadInterruptReason QWebEngineDownloadRequest::interruptReason() const

Returns the reason why the download was interrupted.

Note: Getter function for property interruptReason.

See also interruptReasonString().

QString QWebEngineDownloadRequest::interruptReasonString() const

Returns a human-readable description of the reason for interrupting the download.

Note: Getter function for property interruptReasonString.

See also interruptReason().

[signal] void QWebEngineDownloadRequest::isPausedChanged()

This signal is emitted whenever isPaused changes.

Note: Notifier signal for property isPaused.

See also pause() and isPaused.

bool QWebEngineDownloadRequest::isSavePageDownload() const

Returns true if this is a download request for saving a web page.

Note: Getter function for property isSavePageDownload.

See also savePageFormat() and setSavePageFormat().

QString QWebEngineDownloadRequest::mimeType() const

Returns the MIME type of the download.

Note: Getter function for property mimeType.

QWebEnginePage *QWebEngineDownloadRequest::page() const

Returns the page the download was requested on. If the download was not triggered by content in a page, nullptr is returned.

[slot] void QWebEngineDownloadRequest::pause()

Pauses the download.

Has no effect if the state is not DownloadInProgress. Does not change the state.

See also resume() and isPaused().

qint64 QWebEngineDownloadRequest::receivedBytes() const

Returns the amount of data in bytes that has been downloaded so far.

-1 means the size is unknown.

Note: Getter function for property receivedBytes.

[slot] void QWebEngineDownloadRequest::resume()

Resumes the current download if it was paused or interrupted.

Has no effect if the state is not DownloadInProgress or DownloadInterrupted. Does not change the state.

See also pause(), isPaused(), and state().

QWebEngineDownloadRequest::SavePageFormat QWebEngineDownloadRequest::savePageFormat() const

Returns the format the web page will be saved in if this is a download request for a web page.

Note: Getter function for property savePageFormat.

See also setSavePageFormat() and isSavePageDownload().

void QWebEngineDownloadRequest::setDownloadDirectory(const QString &directory)

Sets directory as the directory path to download the file to.

The download directory path can only be set in response to the QWebEngineProfile::downloadRequested() signal before the download is accepted. Past that point, this function has no effect on the download item's state.

Note: Setter function for property downloadDirectory.

See also downloadDirectory().

void QWebEngineDownloadRequest::setDownloadFileName(const QString &fileName)

Sets fileName as the file name to download the file to.

The download file name can only be set in response to the QWebEngineProfile::downloadRequested() signal before the download is accepted. Past that point, this function has no effect on the download item's state.

Note: Setter function for property downloadFileName.

See also downloadFileName().

void QWebEngineDownloadRequest::setSavePageFormat(QWebEngineDownloadRequest::SavePageFormat format)

Sets the format the web page will be saved in if this is a download request for a web page.

Note: Setter function for property savePageFormat.

See also savePageFormat() and isSavePageDownload().

QWebEngineDownloadRequest::DownloadState QWebEngineDownloadRequest::state() const

Returns the download item's current state.

Note: Getter function for property state.

See also DownloadState.

[signal] void QWebEngineDownloadRequest::stateChanged(QWebEngineDownloadRequest::DownloadState state)

This signal is emitted whenever the download's state changes.

Note: Notifier signal for property state.

See also state() and DownloadState.

QString QWebEngineDownloadRequest::suggestedFileName() const

Returns the suggested file name.

Note: Getter function for property suggestedFileName.

qint64 QWebEngineDownloadRequest::totalBytes() const

Returns the total amount of data to download in bytes.

-1 means the size is unknown.

Note: Getter function for property totalBytes.

QUrl QWebEngineDownloadRequest::url() const

Returns the download's origin URL.

Note: Getter function for property url.