我想创建我自己的自定义页面。这个类继承自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参数对象复制到当前对象。
发布于 2015-09-07 09:13:55
要修复代码,请执行以下操作:
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()的私有部分中声明的。实际上,从QObject派生的所有Qt类(直接或间接)都使用这个宏来声明它们的复制构造函数和赋值操作符是私有的。在Qt对象模型页面上对身份与值的讨论中找到了推理。 主要的结果是,您应该使用指向QObject (或指向QObject子类)的指针,否则您可能会倾向于将QObject子类用作值。例如,如果没有复制构造函数,就不能使用QObject的子类作为要存储在其中一个容器类中的值。你必须储存指针。
[http://doc.qt.io/qt-5/qobject.html#no-copy-constructor-or-assignment-operator]
如果还想创建某种副本,恐怕您必须创建自己的set方法来复制所需的内容和/或属性。
另一个选项是创建一个类,其中包含作为成员的QWebPage指针。您可以使用内部QWebPage编写自己的方法,从而创建如何使用现有QWebPage实例的自定义方法。但是,只有在不需要在另一个上下文中使用现有实例的情况下,这才能起作用。
https://stackoverflow.com/questions/32433260
复制相似问题