Конвертировать QPair в QVariant

у меня есть следующая проблема: я хочу передавать данные через TCP и написал для этого функцию. Для максимального повторного использования шаблон функции f(QPair<QString, QVariant> data). Первое значение (aka QString) используется получателем в качестве целевого адреса, второй содержит данные. Теперь я хочу перевести QPair<int, int>-значение, но, к сожалению, я не могу преобразовать QPair до QVariant. Оптимальным было бы иметь возможность передать пару int-значения без необходимости писать новую функцию (или перегружать старый.) Что является лучшей альтернативой QPair в этом случае?

2 ответов


вы должны использовать специальный макрос Q_DECLARE_METATYPE() чтобы сделать пользовательские типы доступными для


Примечание: этот ответ использует другие функции для их преобразования, что вы можете рассмотреть.

можно использовать QDataStream для сериализации QPair to QByteArray и затем преобразовать его в QVariant, а вы можете обратный процесс, чтобы получить QPair С QVariant.

пример:

//Convert the QPair to QByteArray first and then
//convert it to QVariant
QVariant tovariant(const QPair<int, int> &value)
{
    QByteArray ba;
    QDataStream stream(&ba, QIODevice::WriteOnly);
    stream << value;
    return QVariant(ba);
}

//Convert the QVariant to QByteArray first and then
//convert it to QPair
QPair<int, int> topair(const QVariant &value)
{
    QPair<int, int> pair;
    QByteArray ba = value.toByteArray();
    QDataStream stream(&ba, QIODevice::ReadOnly);
    stream >> pair;
    return pair;
}