Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何复制QQ网页?_C++_Qt_Copy Constructor_Qwebview_Qobject - Fatal编程技术网

C++ 如何复制QQ网页?

C++ 如何复制QQ网页?,c++,qt,copy-constructor,qwebview,qobject,C++,Qt,Copy Constructor,Qwebview,Qobject,我想创建自己的自定义页面。此类继承自。但是我想通过复制一个的值来创建它,这样我就可以添加我自己的方法,重写一些东西,然后用我的自定义页面替换当前页面 问题是:QObjectcopy构造函数似乎不起作用: class webpage : public QWebPage { public: //webpage(QObject* parent = 0); webpage(QWebPage*); void foo(); } webpage::webpage(QWebPage *

我想创建自己的自定义页面。此类继承自。但是我想通过复制一个的值来创建它,这样我就可以添加我自己的方法,重写一些东西,然后用我的自定义页面替换当前页面

问题是:
QObject
copy构造函数似乎不起作用:

class webpage : public QWebPage
{
public:
    //webpage(QObject* parent = 0);
    webpage(QWebPage*);
    void foo();
}

webpage::webpage(QWebPage *page)
    : QWebPage(*page)
{
}
导致错误的原因:

错误:C2248:“QObject::QObject”:无法访问私有成员 在类“QObject”中声明

我的问题是:我如何解决这个问题?我真正想要的是将
页面
参数对象复制到当前对象。

要修复代码:

class webpage : public QWebPage
{
  Q_OBJECT
public:
    //webpage(QObject* parent = 0);
    webpage::webpage(QWebPage *page)
    : QWebPage(page)
    {
    }

    void foo();
};
QWebPage的构造函数需要一个指针,但您取消了对它的引用。这导致了您描述的错误

QWebPage派生自QObject,这意味着它既没有复制构造函数也没有赋值运算符。这是出于设计:

QObject既没有复制构造函数也没有赋值运算符。 这是故意的。事实上,它们是公开的,但是是私下的 带有宏Q_DISABLE_COPY()的节。事实上,所有的Qt类 从QObject派生(直接或间接)使用此宏声明 它们的复制构造函数和赋值运算符必须是私有的。这个 在Qt上关于身份与价值的讨论中可以找到推理 对象模型页面

主要结果是您应该使用指向QObject(或 您的QObject子类),否则您可能会尝试使用 将QObject子类作为值。例如,没有副本 构造函数,不能使用QObject的子类作为要创建的值 存储在其中一个容器类中。必须存储指针

[

如果仍要创建一种副本,恐怕您必须创建自己的set方法来复制所需的内容和/或属性


另一个选项是创建一个包含QWebPage指针作为成员的类。您可以使用内部QWebPage编写自己的方法,从而创建如何使用现有QWebPage实例的自定义方法。但只有在不需要在其他上下文中使用现有实例的情况下,这才有效。

需要使用哪种数据从QWebPage的一个实例到另一个实例的py?
QObject
具有特殊设计,禁用直接复制。您需要实现方法
webpage*webpage::clone()
这将提供一个具有必要逻辑的深度副本。您应该提到,出于某种原因,它被设计禁用。请参阅下面的答案。@vahancho:我想将对象的浅层副本复制到正在
网页::网页(QWebPage*页)中创建的对象
constructor@SaZ:我不太明白,我要复制的对象是
QWebPage
类型的
setPage()
的返回值。我将如何创建
克隆()
QWebPage内的方法class?Jack问的是复制,而不是Qt内存模型或继承。没错,我说不应该复制QObject。这是我的解释。