qt: Improve README
* lang/qt/README: Add more content. Clearly note license difference.
This commit is contained in:
parent
66febf9942
commit
3f92253e0e
120
lang/qt/README
120
lang/qt/README
@ -1,7 +1,109 @@
|
|||||||
Qt API bindings/wrapper for gpgme
|
Qt API bindings/wrapper for GPGME
|
||||||
----------------------------------------
|
---------------------------------
|
||||||
Based on KF5gpgmepp QGpgme and libkleo/backends/qgpgme
|
Based on KF5gpgmepp QGpgME and libkleo/backends/qgpgme
|
||||||
|
|
||||||
|
Please note that QGpgME has a different license (GPL only)
|
||||||
|
then GPGME itself. See the License secion in this
|
||||||
|
document for more information.
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
QGpgme provides a very high level Qt API around GpgMEpp.
|
||||||
|
As such it depends on GpgMEpp additionally to GpgME.
|
||||||
|
|
||||||
|
There are two general concepts in QGpgME. Data abstraction
|
||||||
|
through GpgMEpp's Dataprovider interface and the Job pattern.
|
||||||
|
|
||||||
|
Data can be provided with QByteArrayDataProvider or
|
||||||
|
QIODeviceDataProvider which can be constructed from their
|
||||||
|
respective types. This means you can pass a QFile, QProcess,
|
||||||
|
QString, etc.. directly to GPGME.
|
||||||
|
|
||||||
|
To provide a stable API / ABI and because of historic reasons
|
||||||
|
in libkleo (Where QGpgME was originally developed as an abstract
|
||||||
|
crypto backend) QGpgME only provides abstract interfaces as
|
||||||
|
public API while the actual implementation happens in the
|
||||||
|
private QGpgME prefixed classes.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
To use QGpgME first you need to obtain a Protocol class
|
||||||
|
either for CMS (S/MIME) or OpenPGP. This Protocol class
|
||||||
|
can then be used to create a Job.
|
||||||
|
|
||||||
|
Each Job can be started asynchronusly and emits a result
|
||||||
|
signal when done. The jobs are deleted automatically
|
||||||
|
with QObject::deleteLater so they can be started without
|
||||||
|
result handlers.
|
||||||
|
|
||||||
|
The result signal provides a tuple of objects with the
|
||||||
|
appropiate result information for this job. For historic
|
||||||
|
reasons each result signal also includes an AuditLog
|
||||||
|
and an AuditLog Error. These are only useful for
|
||||||
|
S/MIME signature validation but are part of other jobs
|
||||||
|
for API stability reasons.
|
||||||
|
|
||||||
|
Some jobs like the verification or decryption jobs have
|
||||||
|
dedicated result classes. Each result class at least
|
||||||
|
has the member function error() that can be used
|
||||||
|
to check if a job failed. Additionally errors are emited
|
||||||
|
in the result signal.
|
||||||
|
|
||||||
|
Jobs also provide progress signal whenever GnuPG emits
|
||||||
|
a progress status line.
|
||||||
|
|
||||||
|
Most jobs also provide a way synchronusly execute them.
|
||||||
|
Please not that synchronus use does not cause the autodeletion
|
||||||
|
to take place so you have to manually delete them.
|
||||||
|
|
||||||
|
Async usage:
|
||||||
|
|
||||||
|
/* Create a job */
|
||||||
|
EncryptJob *job = openpgp()->encryptJob(/*ASCII Armor */false, /* Textmode */ false);
|
||||||
|
/* Connect something to the result signal */
|
||||||
|
connect(job, &EncryptJob::result, this, [] (const GpgME::EncryptionResult &result,
|
||||||
|
const QByteArray &cipherText,
|
||||||
|
const QString,
|
||||||
|
const GpgME::Error) {
|
||||||
|
/* Handle the result / do something with the ciphertext */
|
||||||
|
});
|
||||||
|
/* Start the job */
|
||||||
|
job->start(keys, inptr, outptr, Context::AlwaysTrust);
|
||||||
|
/* Do not delete the job as it is autodeleted. */
|
||||||
|
|
||||||
|
Syncronus usage:
|
||||||
|
|
||||||
|
/* Create a job */
|
||||||
|
KeyListJob *listjob = openpgp()->keyListJob(false, false, false);
|
||||||
|
/* Prepare result vector */
|
||||||
|
std::vector<Key> keys;
|
||||||
|
/* Execute it synchronusly */
|
||||||
|
KeyListResult result = listjob->exec(QStringList() << QStringLiteral("alfa@example.net"),
|
||||||
|
false, keys);
|
||||||
|
/* Delete the job */
|
||||||
|
delete listjob;
|
||||||
|
/* Work with the result */
|
||||||
|
|
||||||
|
See the generated documentation for more info on the classes
|
||||||
|
in QGpgME. (Subdir doc)
|
||||||
|
|
||||||
|
Examples / Tests
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The tests in the tests subdir can be used to get a better
|
||||||
|
idea of QGpgME's usage. They also serve to test the C++
|
||||||
|
API. Kleopatra and KMails Messagelib also make extensive
|
||||||
|
use of QGpgME and can be used as further examples.
|
||||||
|
|
||||||
|
Hacking
|
||||||
|
-------
|
||||||
|
QGpgME comes from a KDE background. As such it does not use
|
||||||
|
GNU Coding styles but KDE Coding styles. See:
|
||||||
|
https://techbase.kde.org/Policies/Frameworks_Coding_Style
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
QGpgME is free software; you can redistribute it and/or
|
QGpgME is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License as
|
modify it under the terms of the GNU General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
@ -26,15 +128,3 @@ Qt. If you modify this file, you may extend this exception to
|
|||||||
your version of the file, but you are not obligated to do so. If
|
your version of the file, but you are not obligated to do so. If
|
||||||
you do not wish to do so, delete this exception statement from
|
you do not wish to do so, delete this exception statement from
|
||||||
your version.
|
your version.
|
||||||
|
|
||||||
Overview
|
|
||||||
--------
|
|
||||||
QGpgme provides Qt API bindings around Gpgmepp. It depends on Gpgmepp.
|
|
||||||
|
|
||||||
See the generated documentation for more info.
|
|
||||||
|
|
||||||
Hacking
|
|
||||||
-------
|
|
||||||
QGpgME comes from a KDE background. As such it does not use
|
|
||||||
GNU Coding styles but KDE Coding styles. See:
|
|
||||||
https://techbase.kde.org/Policies/Frameworks_Coding_Style
|
|
||||||
|
Loading…
Reference in New Issue
Block a user