首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt -调用“QVariant::QVariant(MyClass&)”没有匹配函数

Qt -调用“QVariant::QVariant(MyClass&)”没有匹配函数
EN

Stack Overflow用户
提问于 2016-09-16 07:39:23
回答 2查看 2.1K关注 0票数 6

我在创建一个具有自定义类型的QVariant时遇到了困难。下面是一个小例子,展示了我想要实现的目标:

main.cpp:

代码语言:javascript
复制
#include "MyClass.h"

int main() {
  MyClass some_object;
  QVariant variant(some_object);
  return 0;
}

包括/MyClass.h:

代码语言:javascript
复制
#pragma once

#include <QtCore>

class MyClass {
public:
  MyClass() : _my_member(0.0) {}

  MyClass(const MyClass &other) { _my_member = other._my_member; }

  ~MyClass() {}

  MyClass& operator=(MyClass& other)
  {
    swap(*this, other);
    return *this;
  }

  MyClass(MyClass&& other) : MyClass()
  {
    swap(*this, other);
  }

  friend void swap(MyClass& first, MyClass& second)
  {
    using std::swap;
    swap(first._my_member, second._my_member);
  }

private:
  float _my_member;
};
Q_DECLARE_METATYPE(MyClass);

生成失败时出现以下错误:

代码语言:javascript
复制
error: no matching function for call to ‘QVariant::QVariant(MyClass&)’
  QVariant variant(some_object);
                              ^

如何解决这个错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-16 08:04:50

您正在用MyClass实例调用MyClass的构造函数:QVariant中没有这样的构造函数。

代码语言:javascript
复制
#include "MyClass.h"

int main() {
  MyClass some_object;
  QVariant variant = QVariant::fromValue(some_object);
  return 0;
}

或者,您可以使用QVariant::setValue

代码语言:javascript
复制
#include "MyClass.h"

int main() {
  MyClass some_object;
  QVariant variant;
  variant.setValue(some_object);
  return 0;
}

注:

要从QVariant检索值,您必须使用模板方法QVariant::value (可选地使用QVariant::canConvert )。

代码语言:javascript
复制
if (variant.canConvert<MyClass>())
    MyClass retrieve_object = variant.value<MyClass>();

Note2:

看来您试图实现copy-and-swap idiom。您的operator=应该是:

代码语言:javascript
复制
MyClass& operator=(MyClass other)
{
  swap(*this, other);
  return *this;
}

而不是:

代码语言:javascript
复制
MyClass& operator=(MyClass& other)
{
  swap(*this, other);
  return *this;
}

如果您使用引用执行交换,other将被修改,我怀疑您是否想要它。

票数 8
EN

Stack Overflow用户

发布于 2016-09-16 08:03:34

要使类中的QVariant对象使用QVariantfromValue方法

代码语言:javascript
复制
QVariant variant = QVariant::fromValue(some_object);

您有错误,因为在QVariant中没有MyClass&类型参数的此类构造函数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39526165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档