QVariant.value & lt; T & gt; (), вызывающий проблемы

Итак, у меня есть собственный класс Foo, который был зарегистрирован как метатип с использованием Q_DECLARE_METATYPE(Foo) макрос в конце определения класса.

Я могу установить элементы в списке, проверить, если canConvert, но когда я пытаюсь сделать элемент типа Foo во время компиляции.

Используя QVariant, переданный из QModelIndex &index:

Foo item(index.data(Qt::DisplayRole).value<Foo>())

завершается со следующими ошибками:

no matching function for call to 'namespace::Foo::Foo(namespace::Foo)'
In instantiation of 'T qvariant_cast(const Foo&) [with T = namesapce::Foo]':
required from 'T QVariant::value() const [with T = namespace::Foo]'
no matching function for call to 'namespace::Foo::Foo(const namespace::Foo &)'
no matching function for call to 'namespace::Foo::Foo(const namespace::Foo&)'
no matching function for call to 'namespace::Foo::Foo(const namespace::Foo)'
In member function 'T QVariant::value() const [with T = namespace::Foo]'

все из файла qvariant.h

Что я здесь не так делаю?
Мой класс имеет следующие конструкторы:

Foo::Foo(const Foo &)
Foo::Foo()

Заголовок выглядит следующим образом:

namespace a {
namespace b {
class Foo {
explicit Foo();
explicit Foo(const Foo &a);
...
};
} // b
} // a
Q_DECLARE_METATYPE(a::b::Foo)

0

Решение

Как предложил Дэн Милберн, удалив explicit ключевые слова решили проблему. Похоже, что неявное преобразование происходило в вызове значения, поэтому наличие только явных конструкторов предотвратило это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]