В QXMPP нет возможности посмотреть список комнат, поэтому сделал вручную.
Для начала нужно подготовится к принятию ответа на запрос т.к. придти он может быстрее, чем программа приготовится.
connect(Client, SIGNAL(discoveryIqReceived (const QXmppDiscoveryIq &)), this, SLOT(discoveryIqReceived (const QXmppDiscoveryIq &)));
Затем нужно подготовить и отправить запрос на предоставляемые сервисы. Можно получить как все сервисы (например ICQ, MRIM транспорты или конференции)
Так и сразу запросить список комнат, который с точки зрения протокола, выглядит как список сервисов предоставляемых conference.<host>.
Отправляется запрос так
    QXmppIq mes(QXmppIq::Get); //Мы хотим получить данные
    mes.setTo("conference.<host>"); //Кому отправляем. Тут может быть и просто <host>, тогда вернется список сервисов хоста
    mes.setId(id); //Заранее сгенерированная случайная строка. Позже понадобится для приема ответа.
    QXmppElementList list; //Список передаваемых параметров
    QXmppElement elem; //Элемент списка. Он всего один
    elem.setTagName("query"); //Передаем запрос
    elem.setAttribute("xmlns", "http://jabber.org/protocol/disco#items"); //Устанавливаем атрибут
    list.append(elem); //Добавляем к списку
    mes.setExtensions(list); //Устанавливаем список
    Client->sendPacket(mes); //Отправляем
В результате отправится сообщение вида
<iq type='get' to='conference.<host>' id='random'>
	<query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>
Теперь сервер пришлет нам ответ, который выглядит так
<iq from='conference.sudouser.ru' to='<user>@<host>/Home' id='тот самый random' type='result'>
	<query xmlns='http://jabber.org/protocol/disco#items'>
		<item jid='main@conference.sudouser.ru' name='main'/>
		<item jid='master@conference.sudouser.ru' name='master'/>
	</query>
</iq>
Сообщение ловится сигналом, который уже связан с нужным нам слотом. Сейчас запихаем этот список в QListWidget
    if (iq.getId() != id){//Собственно это то сообщение, которого мы ждем?
	return;
    }
    QList<QXmppDiscoveryIq::Item> items = iq.items();
    for (int i = 0; i < items.count(); ++i){
	QListWidgetItem *item = new QListWidgetItem(ui->listWidget, 0);
	item->setText(items[i].name());
	item->setData(Qt::UserRole, QVariant(items[i].jid()));
	ui->listWidget->addItem(item);
    }