Конвертировать 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;
}