如何复制QWebPage?

时间:2015-09-07 07:28:14

标签: c++ qt copy-constructor qwebview qobject

我想创建自己的自定义页面。此类继承自QWebPage。但我想创建它来复制existing instance中的值,这样我就可以添加自己的方法,覆盖一些内容,然后用setPage()的自定义页面替换当前页面。

问题是:ReceiveTimeout复制构造函数似乎不起作用:

QObject

导致错误:

  

错误:C2248:' QObject :: QObject' :无法访问私人会员   在课堂上宣布' QObject'

我的问题是:我该如何解决这个问题?我真正想要的是将class webpage : public QWebPage { public: //webpage(QObject* parent = 0); webpage(QWebPage*); void foo(); } webpage::webpage(QWebPage *page) : QWebPage(*page) { } 参数对象复制到当前对象。

1 个答案:

答案 0 :(得分:0)

修复您的代码:

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的子类作为值   存储在其中一个容器类中。你必须存储指针。

[http://doc.qt.io/qt-5/qobject.html#no-copy-constructor-or-assignment-operator]

如果您仍想创建一种副本,我担心您必须创建自己的set方法来复制所需的内容和/或属性。

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