我如何复制q网页?



我想创建自己的自定义页面。这个类继承自QWebPage。但我想创建它复制值从一个existing instance,所以我只是添加我自己的方法,覆盖一些东西,然后用我的自定义的setPage()替换当前页面。

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

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

导致错误:

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

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

修改代码:

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

q网页的构造函数需要一个指针,但是你对它解引用了。这导致了你所描述的错误。

q网页派生自QObject,这意味着它既没有复制构造函数,也没有赋值操作符。这是由设计:

QObject既没有复制构造函数,也没有赋值操作符。这是设计好的。实际上,它们是声明的,但是在私有的使用宏Q_DISABLE_COPY()。实际上,所有的Qt类派生自QObject(直接或间接)使用此宏来声明它们的复制构造函数和赋值操作符必须是私有的。的在Qt上对同一性与价值的讨论中找到了推理对象模型页。

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

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

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

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

最新更新