QXmpp在服务器上创建MUC室(xep--0045)

QXmpp在服务器上创建MUC室(xep--0045),xmpp,qxmpp,Xmpp,Qxmpp,我正在尝试使用QXmpp将MUC功能添加到我的应用程序中,我在QXmppMucManager.h头文件中遵循此信息 /// \brief The QXmppMucManager class makes it possible to interact with /// multi-user chat rooms as defined by XEP-0045: Multi-User Chat. /// /// To make use of this manager, you need to inst

我正在尝试使用QXmpp将MUC功能添加到我的应用程序中,我在QXmppMucManager.h头文件中遵循此信息

/// \brief The QXmppMucManager class makes it possible to interact with
/// multi-user chat rooms as defined by XEP-0045: Multi-User Chat.
///
/// To make use of this manager, you need to instantiate it and load it into
/// the QXmppClient instance as follows:
///
/// \code
/// QXmppMucManager *manager = new QXmppMucManager;
/// client->addExtension(manager);
/// \endcode
///
/// You can then join a room as follows:
///
/// \code
/// QXmppMucRoom *room = manager->addRoom("room@conference.example.com");
/// room->setNickName("mynick");
/// room->join();
/// \endcode
///
/// \ingroup Managers
在我的一个类的构造函数中,我添加了一个这样的MuCManager

QXmppMucManager *manager = new QXmppMucManager;

    m_xmppClient.addExtension(manager);
在一个创建Muc组的插槽中,我正在这样做

QXmppMucRoom *room = manager->addRoom("livefit@mthinkpad");

    room->setNickName("mThinkpad");

    room->join();
我希望这会创建一个文件室,如果它不存在,则加入,如果它已经存在,则加入,但这只是使我的应用程序崩溃。我无法思考qxmpp如何实现xep--0045。如果有人帮助指出我做错了什么,或者我如何从客户端在服务器上创建Muc文件室,我将不胜感激。
我的服务器是本地ejabberd安装,我可以在“mthinkpad”域访问它。

如果有人有相同的问题,我可以创建房间。下面是代码。我可以动态创建和配置房间(我使用Openfire,它允许),但如果需要,您可以请求配置表单

String jid=roomName.text()+"@conference."+serverName;
       if(jid.isEmpty())
               return ;
           QList<QXmppMucRoom*> rooms = manager->rooms();
           QXmppMucRoom* r;
           foreach(r, rooms)
           {
               if(r->jid() == jid)
               {
                   //LOG_MODEL_DEBUG("Group chat", "had joined room[%s]", qPrintable(jid));
                   return ;
               }
           }
           m_pRoom = manager->addRoom(jid);
           if(m_pRoom)
           {
               //nick
               m_pRoom->setNickName("theDip");
               //join the room.
               m_pRoom->join();
           }

           //Prepare the dataform.
           QXmppDataForm form(QXmppDataForm::Submit);
           QList<QXmppDataForm::Field> fields;
           {
               QXmppDataForm::Field field(QXmppDataForm::Field::HiddenField);
               field.setKey("FORM_TYPE");
               field.setValue("http://jabber.org/protocol/muc#roomconfig");
               fields.append(field);
           }
           QXmppDataForm::Field field;
           field.setKey("muc#roomconfig_roomname");
           field.setValue(roomName.text());
           fields.append(field);

           field.setKey("muc#roomconfig_subject");
           field.setValue(roomSubject.text());
           fields.append(field);

           field.setKey("muc#roomconfig_roomdesc");
           field.setValue(roomDesc.text());
           fields.append(field);
           {
               QXmppDataForm::Field field(QXmppDataForm::Field::BooleanField);
               field.setKey("muc#roomconfig_persistentroom");
               field.setValue(true);
               fields.append(field);
           }

           form.setFields(fields);
           //The dataform ends here.
           m_pRoom->setConfiguration(form);
String jid=roomName.text()+“@conference.+serverName;
if(jid.isEmpty())
回来
QList rooms=manager->rooms();
qxmppmuc房间*r;
foreach(右,房间)
{
如果(r->jid()==jid)
{
//LOG_MODEL_DEBUG(“群聊”,“已加入[%s]”,qPrintable(jid));
回来
}
}
m_pRoom=经理->添加房间(jid);
如果(m_pRoom)
{
//尼克
m_pRoom->set昵称(“theDip”);
//加入房间。
m_pRoom->join();
}
//准备数据表。
QXmppDataForm表单(QXmppDataForm::Submit);
QList字段;
{
QXmppDataForm::Field字段(QXmppDataForm::Field::HiddenField);
字段设置键(“FORM_类型”);
字段设置值(“http://jabber.org/protocol/muc#roomconfig");
字段。追加(字段);
}
QXmppDataForm::Field字段;
field.setKey(“muc#roomconfig_roomname”);
field.setValue(roomName.text());
字段。追加(字段);
field.setKey(“muc#roomconfig_subject”);
field.setValue(roomSubject.text());
字段。追加(字段);
field.setKey(“muc#roomconfig_roomdesc”);
field.setValue(roomDesc.text());
字段。追加(字段);
{
QXmppDataForm::Field字段(QXmppDataForm::Field::BooleanField);
field.setKey(“muc#roomconfig_persistentroom”);
字段设置值(真);
字段。追加(字段);
}
表单。设置字段(字段);
//数据表单到此结束。
m_pRoom->setConfiguration(表单);