QXmpp Version: 1.15.0
Loading...
Searching...
No Matches

Introduction

QXmpp is a cross-platform C++ XMPP client and server library built on top of the Qt framework (Qt 6.4+). It implements a large number of XMPP Extension Protocols (XEPs) and exposes a modern, reactive API based on C++20 and Qt's property system.

Getting Started

The central class is QXmppClient. Create one, register the managers you need, then connect:

auto *client = new QXmppClient(this);
// Register managers
auto *pubsub = client->addNewExtension<QXmppPubSubManager>();
auto *disco = client->addNewExtension<QXmppDiscoveryManager>();
auto *muc = client->addNewExtension<QXmppMucManagerV2>();
// Connect
config.setJid("user@example.org");
config.setPassword("secret");
client->connectToServer(config);
Main class for starting and managing connections to XMPP servers.
Definition QXmppClient.h:62
The QXmppConfiguration class holds configuration options.
Definition QXmppConfiguration.h:37
void setJid(const QString &jid)
Definition QXmppConfiguration.cpp:239
The QXmppDiscoveryManager class makes it possible to discover information about other entities as def...
Definition QXmppDiscoveryManager.h:23
XEP-0045: Multi-User Chat Manager with support for XEP-0402: PEP Native Bookmarks.
Definition QXmppMucManagerV2.h:52
The QXmppPubSubManager aims to provide publish-subscribe functionality as specified in XEP-0060: Publ...
Definition QXmppPubSubManager.h:21

Async API

All network operations return a QXmppTask<T>, which represents a pending result. QXmppTask supports co_await, making sequential async code straightforward:

QXmppTask<void> MyManager::doSomething()
{
auto result = co_await muc->joinRoom("room@conference.example.org", "MyNick").withContext(this);
if (auto *err = std::get_if<QXmppError>(&result)) {
qWarning() << "Join failed:" << err->description;
co_return;
}
// continue ...
}
Definition QXmppTask.h:330

Alternatively, use .then() to attach a callback:

muc->joinRoom("room@conference.example.org", "MyNick").then(this, [](auto result) {
if (auto *err = std::get_if<QXmppError>(&result)) {
qWarning() << "Join failed:" << err->description;
}
});

Results are typically QXmpp::Result<T>, a std::variant<T, QXmppError>. Always pass a context object (this) to .then() or .withContext() to ensure the callback is not invoked after the object has been destroyed.

Managers

Managers are the primary way to use XMPP features. Register them with QXmppClient and extend QXmppClient by subclassing QXmppClientExtension.

See the Managers module for the full list.

Messaging

Contacts & Roster

Groupchat

File Sharing

End-to-End Encryption

Calls

Bookmarks & PubSub

Service Discovery & Utilities

Legacy (deprecated)

Low-Level Stanza API

For direct access to XMPP stanzas:

Project Links