e6830b58b6
* m4/qt5.m4: Export moc for Qt 5 in variable MOC5. Unset temporary MOC2. * m4/qt6.m4: Export moc for Qt 6 in variable MOC6. * lang/qt/src/Makefile.am: Generate .moc5 files from .h files. Generate .moc forwarding headers in moc5 subfolder. Add moc5 subfolder to include paths for Qt 5-based qgpgme library. Ditto for Qt 6. Clean up moc5 and moc6 subfolders. * lang/qt/tests/Makefile.am: List tests and test runners for Qt 5 and Qt 6. Generate .moc5 files from .cpp files of tests. Generate .moc forwarding headers in moc5 subfolder. Generate .hmoc file from t-support.h directly in moc5 subfolder. Add moc5 subfolder to include paths for all Qt 5-based tests and runners. Ditto for Qt 6. Specify sources, LDADD and CPPFLAGS for all tests and test runners for Qt 5 and Qt 6. Clean up moc5 and moc6 subfolders. -- The output of Qt 5's moc and Qt 6's moc is incompatible. Therefore, we need to generate different .moc files for Qt 5 and Qt 6 to support co-building of the Qt 5 and Qt 6 bindings. The duplication of the listing of the tests couldn't be avoided because automake doesn't understand `the_tests5 = $(the_tests:%=%5)` and couldn't match the tests with their _SOURCES. Maybe some m4 programming would have helped, but that would have made the Makefiles even more unreadable. GnuPG-bug-id: 7205 |
||
---|---|---|
.. | ||
doc | ||
src | ||
tests | ||
Makefile.am | ||
README |
Qt API bindings/wrapper for GPGME --------------------------------- Based on KF5gpgmepp QGpgME and libkleo/backends/qgpgme Please note that QGpgME has a different license (GPL only) then GPGME itself. See the License section 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 asynchronously 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 appropriate 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 emitted in the result signal. Jobs also provide progress signal whenever GnuPG emits a progress status line. Most jobs also provide a way synchronously execute them. Please not that synchronous 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. */ Synchronous 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 modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. QGpgME is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA In addition, as a special exception, the copyright holders give permission to link the code of this program with any edition of the Qt library by Trolltech AS, Norway (or with modified versions of Qt that use the same license as Qt), and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than 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 you do not wish to do so, delete this exception statement from your version.