将 QWebEngineHistory 保存并加载到 QWebEnginePage
Save and load QWebEngineHistory to a QWebEnginePage
我需要保存 QWebEnginePage
的历史记录并加载回来。因此,我想将页面 A 的历史记录存储在某种结构中并将其设置为页面 B。
在文档中我找到了以下方法:
// Saves the web engine history history into stream.
QDataStream &operator<<(QDataStream &stream, const QWebEngineHistory &history)
// Loads the web engine history from stream into history.
QDataStream &operator>>(QDataStream &stream, QWebEngineHistory &history)
但老实说,我不知道如何与他们合作。
我尝试了以下方法:
QWebEnginePage *m_history;
...
...
void setHistory(QWebEngineHistory *history){
QDataStream data;
data << history; //Hoping that the content of data is persistent after deleting of the QWebEnginePage where the history is coming from
data >> m_history;
}
稍后我想将其加载回页面:
m_history >> m_webEnginePage.history(); // Pseudo-Code
我知道QWebEnginePage
的QWebEngineHistory
是const,但是我想知道为什么还有上面的这两个方法?为什么会有一个函数"loads the web engine history into history"?
我能想到的唯一选择是将我的历史记录存储在 QList
中,但管理它并不好,可能会导致更多问题(因为整个 forward/backward 按钮等)。
非常感谢您的帮助。
不能保存任何对象,保存的是与对象相关的信息,所以你不应该创建QWebEngineHistory,而是保存and/or加载信息。
在下面的示例中,当应用程序关闭并加载启动时,信息将保存在一个文件中。
#include <QtWebEngineWidgets>
int main(int argc, char *argv[]) {
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc,argv);
const QString filename = "history.bin";
QWebEngineView view;
view.load(QUrl("https://whosebug.com"));
{// load
QFile file(filename);
if(file.open(QFile::ReadOnly)){
qDebug() << "load";
QDataStream ds(&file);
ds >> *(view.page()->history());
}
}
view.resize(640, 480);
view.show();
int ret = app.exec();
{// save
QFile file(filename);
if(file.open(QFile::WriteOnly)){
qDebug() << "save";
QDataStream ds(&file);
ds << *(view.page()->history());
}
}
return ret;
}
同样的方法你可以通过QSettings保存:
#include <QtWebEngineWidgets>
int main(int argc, char *argv[]) {
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc,argv);
QWebEngineView view;
view.load(QUrl("https://whosebug.com"));
{// load
QSettings settings;
QByteArray ba = settings.value("page/history").toByteArray();
QDataStream ds(&ba, QIODevice::ReadOnly);
ds >> *(view.page()->history());
}
view.resize(640, 480);
view.show();
int ret = app.exec();
{// save
QSettings settings;
QByteArray ba;
QDataStream ds(&ba, QIODevice::WriteOnly);
ds << *(view.page()->history());
settings.setValue("page/history", ba);
}
return ret;
}
我需要保存 QWebEnginePage
的历史记录并加载回来。因此,我想将页面 A 的历史记录存储在某种结构中并将其设置为页面 B。
在文档中我找到了以下方法:
// Saves the web engine history history into stream.
QDataStream &operator<<(QDataStream &stream, const QWebEngineHistory &history)
// Loads the web engine history from stream into history.
QDataStream &operator>>(QDataStream &stream, QWebEngineHistory &history)
但老实说,我不知道如何与他们合作。 我尝试了以下方法:
QWebEnginePage *m_history;
...
...
void setHistory(QWebEngineHistory *history){
QDataStream data;
data << history; //Hoping that the content of data is persistent after deleting of the QWebEnginePage where the history is coming from
data >> m_history;
}
稍后我想将其加载回页面:
m_history >> m_webEnginePage.history(); // Pseudo-Code
我知道QWebEnginePage
的QWebEngineHistory
是const,但是我想知道为什么还有上面的这两个方法?为什么会有一个函数"loads the web engine history into history"?
我能想到的唯一选择是将我的历史记录存储在 QList
中,但管理它并不好,可能会导致更多问题(因为整个 forward/backward 按钮等)。
非常感谢您的帮助。
不能保存任何对象,保存的是与对象相关的信息,所以你不应该创建QWebEngineHistory,而是保存and/or加载信息。
在下面的示例中,当应用程序关闭并加载启动时,信息将保存在一个文件中。
#include <QtWebEngineWidgets>
int main(int argc, char *argv[]) {
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc,argv);
const QString filename = "history.bin";
QWebEngineView view;
view.load(QUrl("https://whosebug.com"));
{// load
QFile file(filename);
if(file.open(QFile::ReadOnly)){
qDebug() << "load";
QDataStream ds(&file);
ds >> *(view.page()->history());
}
}
view.resize(640, 480);
view.show();
int ret = app.exec();
{// save
QFile file(filename);
if(file.open(QFile::WriteOnly)){
qDebug() << "save";
QDataStream ds(&file);
ds << *(view.page()->history());
}
}
return ret;
}
同样的方法你可以通过QSettings保存:
#include <QtWebEngineWidgets>
int main(int argc, char *argv[]) {
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc,argv);
QWebEngineView view;
view.load(QUrl("https://whosebug.com"));
{// load
QSettings settings;
QByteArray ba = settings.value("page/history").toByteArray();
QDataStream ds(&ba, QIODevice::ReadOnly);
ds >> *(view.page()->history());
}
view.resize(640, 480);
view.show();
int ret = app.exec();
{// save
QSettings settings;
QByteArray ba;
QDataStream ds(&ba, QIODevice::WriteOnly);
ds << *(view.page()->history());
settings.setValue("page/history", ba);
}
return ret;
}