Ответ 1
Вы также должны сделать:
Q_DECLARE_METATYPE (std::string)
Цитата Qt Doc
Добавление Q_DECLARE_METATYPE() делает тип, известный всем шаблонам основанные функции, включая QVariant. Обратите внимание, что , если вы собираетесь использовать тип в очереди сигналов и слотов или в QObject's системе свойств , вам также необходимо вызвать qRegisterMetaType(), поскольку имена разрешаются во время выполнения.