void CommandHandler::processCommand(const Command &command) const { QWebEngineView *webView = ElectricWebView::instance()->webView(); if (command.name() == "load") { if (command.arguments().isEmpty()) webView->load(QUrl("about:blank")); else webView->load(QUrl(command.arguments().first())); } else if (command.name() == "stop") { webView->stop(); } else if (command.name() == "reload") { webView->reload(); } else if (command.name() == "back") { webView->back(); } else if (command.name() == "forward") { webView->forward(); } else if (command.name() == "open") { QString mode = command.arguments().value(0); if (mode == "maximized") { webView->showMaximized(); } else if (mode == "fullscreen") { webView->setGeometry(qApp->desktop()->screenGeometry()); webView->showFullScreen(); } } else if (command.name() == "close") { webView->close(); } else if (command.name() == "current_url") { command.sendResponse(webView->url().toString().toLocal8Bit()); } else if (command.name() == "set_html") { QString type = command.arguments().value(0); QString value = command.arguments().mid(1, -1).join(' '); if (type == "string") { webView->page()->setHtml(value.toLocal8Bit()); } else if (type == "file") { QFile file(value); file.open(QFile::ReadOnly); webView->page()->setHtml(file.readAll()); } } else if (command.name() == "get_html") { QString format = command.arguments().value(0); QEventLoop loop; if (format == "html") { webView->page()->toHtml([&command, &loop](const QString &html) { if (!command.client().isNull()) { command.sendResponse(QUrl::toPercentEncoding(html)); if (command.isGetter()) command.client()->close(); } loop.quit(); }); } else if (format == "text") { webView->page()->toPlainText([&command, &loop](const QString &text) { if (!command.client().isNull()) { command.sendResponse(QUrl::toPercentEncoding(text)); if (command.isGetter()) command.client()->close(); } loop.quit(); }); } else { return; } loop.exec(); } else if (command.name() == "current_title") { command.sendResponse(webView->title().toLocal8Bit()); } else if (command.name() == "screenshot") { processScreenshotCommand(command); } else if (command.name() == "subscribe") { QString eventName = command.arguments().value(0); QStringList events = QStringList() << "title_changed" << "url_changed" << "load_started" << "load_finished" << "user_activity" << "info_message_raised" << "warning_message_raised" << "error_message_raised" << "feature_permission_requested"; if (events.contains(eventName)) { Event event(command); event.setName(eventName); ElectricWebView::instance()->eventManager()->subscribe(event); } } else if (command.name() == "exec_js") { processJavaScriptCommand(command); } else if (command.name() == "inject_js") { QMap<QString, QWebEngineScript::ScriptWorldId> worlds; worlds["main"] = QWebEngineScript::MainWorld; worlds["application"] = QWebEngineScript::ApplicationWorld; worlds["user"] = QWebEngineScript::UserWorld; QMap<QString, QWebEngineScript::InjectionPoint> injectionPoints; injectionPoints["document_creation"] = QWebEngineScript::DocumentCreation; injectionPoints["document_ready"] = QWebEngineScript::DocumentReady; injectionPoints["deferred"] = QWebEngineScript::Deferred; QWebEngineScript::ScriptWorldId world = worlds[command.arguments().value(0)]; QWebEngineScript::InjectionPoint injectionPoint = injectionPoints[command.arguments().value(1)]; QWebEngineScript script; script.setWorldId(world); script.setInjectionPoint(injectionPoint); QString source = command.arguments().value(2); QString value = command.arguments().mid(3, -1).join(' '); if (source == "string") { script.setSourceCode(value); } else if (source == "file") { QFile file(value); file.open(QFile::ReadOnly); script.setSourceCode(file.readAll()); } ElectricWebView::instance()->webView()->page()->scripts().insert(script); } else if (command.name() == "idle_time") { command.sendResponse(QString("%1").arg(ElectricWebView::instance()->inputEventFilter()->idle()).toLocal8Bit()); } else if (command.name() == "block_user_activity") { bool block = QVariant(command.arguments().value(0)).toBool(); ElectricWebView::instance()->inputEventFilter()->setBlock(block); } else if (command.name() == "exec_cmd") { bool sync = command.arguments().value(0) == "sync"; if (sync) { QProcess *process = new QProcess; process->start(command.arguments().mid(1, -1).join(' ')); process->waitForFinished(-1); command.sendResponse(QUrl::toPercentEncoding(process->readAllStandardOutput())); } else { QProcess::startDetached(command.arguments().mid(1, -1).join(' ')); } } else if (command.name() == "accept_feature_request" || command.name() == "reject_feature_request") { QMap<QString, QWebEnginePage::Feature> features; features["geolocation"] = QWebEnginePage::Geolocation; features["audio_capture"] = QWebEnginePage::MediaAudioCapture; features["video_capture"] = QWebEnginePage::MediaVideoCapture; features["audio_video_capture"] = QWebEnginePage::MediaAudioVideoCapture; features["mouse_lock"] = QWebEnginePage::MouseLock; QUrl securityOrigin(command.arguments().value(1)); QWebEnginePage::Feature feature = features[command.arguments().value(0)]; QWebEnginePage::PermissionPolicy policy; if (command.name() == "accept_feature_request") policy = QWebEnginePage::PermissionGrantedByUser; else policy = QWebEnginePage::PermissionDeniedByUser; ElectricWebView::instance()->webView()->page()->setFeaturePermission(securityOrigin, feature, policy); } else if (command.name() == "quit") { int exitCode = command.arguments().value(0).toInt(); qApp->exit(exitCode); } }
int main(int argc, char *argv[]) { // make an instance of the QApplication QApplication a(argc, argv); // Create a new MainWindow QMainWindow w; QToolBar *toolbar= new QToolBar(); QPushButton *back= new QPushButton("back"); QPushButton *fwd= new QPushButton("fwd"); toolbar->addWidget(back); toolbar->addWidget(fwd); w.addToolBar(toolbar); w.addToolBar(toolbar); QWebEngineView *page = new QWebEngineView(); page->load(QUrl("http://www.google.co.uk")); QObject::connect(back,SIGNAL(clicked()),page,SLOT(back())); QObject::connect(fwd,SIGNAL(clicked()),page,SLOT(forward())); w.setCentralWidget(page); w.resize(1024,720); // show it w.show(); // hand control over to Qt framework return a.exec(); }
void TitleBar::onTokenAcquired(const QString& strToken) { WizService::Token::instance()->disconnect(this); #ifdef USEWEBENGINE QWebEngineView* comments = noteView()->commentView(); #else QWebView* comments = noteView()->commentView(); #endif if (strToken.isEmpty()) { comments->hide(); return; } QString strKbGUID = noteView()->note().strKbGUID; QString strGUID = noteView()->note().strGUID; m_commentsUrl = WizService::ApiEntry::commentUrl(strToken, strKbGUID, strGUID); if (comments->isVisible()) { // comments->load(QUrl()); comments->load(m_commentsUrl); } QUrl kUrl(WizService::ApiEntry::kUrlFromGuid(strToken, strKbGUID)); QString strCountUrl = WizService::ApiEntry::commentCountUrl(kUrl.host(), strToken, strKbGUID, strGUID); WizService::AsyncApi* api = new WizService::AsyncApi(this); connect(api, SIGNAL(getCommentsCountFinished(int)), SLOT(onGetCommentsCountFinished(int))); api->getCommentsCount(strCountUrl); }
/*------------------------------------------------------------------------------ | main +-----------------------------------------------------------------------------*/ int main(int argc, char* argv[]) { QApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true); QApplication a(argc, argv); QStringList args = a.arguments(); const bool opengl = !args.contains("--no-opengl"); args.removeAll("--no-opengl"); if (opengl) { qDebug("QML QtWebEngine..."); QQuickView* view = new QQuickView; view->setSource(QUrl("qrc:/poc_main.qml")); view->showFullScreen(); QObject* o = view->rootObject()->findChild<QObject*>("webEngineView"); o->setProperty("url", args.at(1)); } else { qDebug("Widget QtWebEngine..."); QWebEngineView* view = new QWebEngineView; view->load(QUrl(args.at(1))); view->show(); } return a.exec(); }
void TitleBar::onCommentPageLoaded(bool ok) { #ifdef USEWEBENGINE QWebEngineView* comments = noteView()->commentView(); #else QWebView* comments = noteView()->commentView(); #endif if (!ok) { loadErrorPage(); comments->show(); } #ifdef USEWEBENGINE else { comments->page()->runJavaScript("location.protocol",[this](const QVariant& returnValue) { qDebug() << "lcation protocol : " << returnValue.toString(); if ("file:" != returnValue.toString()) { registerWebChannel(); } }); } #endif }
int main(int argc, char** argv) { QApplication a(argc, argv); QWebEngineView v; v.load(QUrl("http://www.baidu.com")); v.show(); return a.exec(); }
QWebEnginePage* QWebEngineView::page() const { Q_D(const QWebEngineView); if (!d->page) { QWebEngineView *that = const_cast<QWebEngineView*>(this); that->setPage(new QWebEnginePage(that)); } return d->page; }
QWebEnginePage *QWebEnginePage::createWindow(WebWindowType type) { Q_D(QWebEnginePage); if (d->view) { QWebEngineView *newView = d->view->createWindow(type); if (newView) return newView->page(); } return 0; }
QWebEngineView *VUtils::getWebEngineView(QWidget *p_parent) { QWebEngineView *viewer = new QWebEngineView(p_parent); VPreviewPage *page = new VPreviewPage(viewer); page->setBackgroundColor(Qt::transparent); viewer->setPage(page); viewer->setZoomFactor(g_config->getWebZoomFactor()); return viewer; }
WebPreviewItem::WebPreviewItem(const QUrl& url) : QGraphicsItem(nullptr) , // needs to be a top level item as we otherwise cannot guarantee that it's on top of other chatlines _boundingRect(0, 0, 400, 300) { qreal frameWidth = 5; QGraphicsProxyWidget* proxyItem = new QGraphicsProxyWidget(this); # ifdef HAVE_WEBENGINE QWebEngineView* webView = new CustomWebView(proxyItem); webView->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); # elif defined HAVE_WEBKIT QWebView* webView = new QWebView; webView->settings()->setAttribute(QWebSettings::JavascriptEnabled, false); # endif webView->load(url); webView->setDisabled(true); webView->resize(1000, 750); proxyItem->setWidget(webView); proxyItem->setAcceptHoverEvents(false); qreal xScale = (_boundingRect.width() - 2 * frameWidth) / webView->width(); qreal yScale = (_boundingRect.height() - 2 * frameWidth) / webView->height(); proxyItem->setTransform(QTransform::fromScale(xScale, yScale), true); proxyItem->setPos(frameWidth, frameWidth); setZValue(30); }
void TitleBar::loadErrorPage() { #ifdef USEWEBENGINE QWebEngineView* comments = noteView()->commentView(); #else noteView()->commentWidget()->hideLocalProgress(); QWebView* comments = noteView()->commentView(); comments->setVisible(true); #endif QString strFileName = Utils::PathResolve::resourcesPath() + "files/errorpage/load_fail_comments.html"; QString strHtml; ::WizLoadUnicodeTextFromFile(strFileName, strHtml); QUrl url = QUrl::fromLocalFile(strFileName); comments->setHtml(strHtml, url); }
void TitleBar::loadErrorPage() { #ifdef USEWEBENGINE QWebEngineView* comments = noteView()->commentView(); #else QWebView* comments = noteView()->commentView(); #endif QString strFileName = Utils::PathResolve::resourcesPath() + "files/errorpage/load_fail_comments.html"; QString strHtml; ::WizLoadUnicodeTextFromFile(strFileName, strHtml); strHtml.replace("{error_text1}", tr("Load Error")); strHtml.replace("{error_text2}", tr("Network anomalies, check the network, then retry!")); strHtml.replace("{error_text3}", tr("Load Error")); QUrl url = QUrl::fromLocalFile(strFileName); comments->setHtml(strHtml, url); }
void TitleBar::onCommentsButtonClicked() { #ifdef USEWEBENGINE QWebEngineView* comments = noteView()->commentView(); #else QWebView* comments = noteView()->commentView(); #endif if (comments->isVisible()) { comments->hide(); return; } if (isNetworkAccessible()) { if (!m_commentsUrl.isEmpty()) { comments->load(m_commentsUrl); QSplitter* splitter = qobject_cast<QSplitter*>(comments->parentWidget()); Q_ASSERT(splitter); QList<int> li = splitter->sizes(); Q_ASSERT(li.size() == 2); QList<int> lin; lin.push_back(li.value(0) - COMMENT_FRAME_WIDTH); lin.push_back(li.value(1) + COMMENT_FRAME_WIDTH); splitter->setSizes(lin); comments->show(); } else { loadErrorPage(); comments->show(); } } else { m_commentsBtn->setEnabled(false); } }
void PublisherPage::show() { QWebEngineView *view = new QWebEngineView; QDir dir; QString cwd = dir.currentPath(); QString html = "qrc:///vpub/index.html"; QString fpath = "/src/qt/res/vpub/index.html"; QString res = cwd + fpath; QFile file(res); // QFile file("file:////res/pbt/index.html"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { html = QString("<html><body><p>Cannot read file in ") + res + QString("</p></body></html>"); } else { html = QTextStream(&file).readAll(); }; view->setHtml(html, QUrl()); view->show(); }
QWebChannel * SetupWebView() { QFileInfo jsFileInfo(QDir::currentPath() + QString::fromLatin1("/qwebchannel.js")); if (!jsFileInfo.exists()) QFile::copy(QString::fromLatin1(":/qtwebchannel/qwebchannel.js"), jsFileInfo.absoluteFilePath()); QtWebEngine::initialize(); QWebEngineView * view = new QWebEngineView(); QWebChannel * channel = new QWebChannel(view->page()); view->page()->setWebChannel(channel); view->load(QUrl(QString::fromLatin1("qrc:/demo.html"))); view->show(); return channel; }
int main(int argc, char *argv[]) { TaskConfig agent_cfg, config; if (!parseArgs(argc, argv, config, agent_cfg)) return 1; agent_cfg.set("Measure.AutoSaveReport", "true"); std::ofstream log_file; if (config.value("logfile") != "-") { log_file.open(config.value("logfile")); Logger::setLogFile(log_file); } config.set("listen_pw", MeasurementAgent::createHashKey(12)); config.set("listen", "0"); config.set("listen_addr", "127.0.0.1"); config.set("browser", "2"); agent_cfg.set("config_file", config.value("config_file")); WebsocketBridge *bridge = new WebsocketBridge(nullptr, config); std::thread agent_thread(runAgent, bridge, agent_cfg); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); QWebEngineView view; view.resize(700, 950); view.show(); // Wait for a few seconds for the agent to start listening on a port for (unsigned int i = 0; bridge->url().empty() && i < 400; ++i) std::this_thread::sleep_for(std::chrono::milliseconds(1+i/10)); int ret; if (bridge->url().empty()) { std::cerr << "cannot start measurement engine"; ret = 1; } else { view.setUrl(QUrl(bridge->url().c_str())); ret = app.exec(); } bridge->die(); agent_thread.join(); return ret; }
int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setQuitOnLastWindowClosed(false); app.setApplicationName("electric-webview"); app.setApplicationVersion("1.0"); QCommandLineParser cmdParser; cmdParser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsCompactedShortOptions); cmdParser.setApplicationDescription("Electric WebView is a scriptable WebView for developers."); cmdParser.addHelpOption(); cmdParser.addVersionOption(); cmdParser.addOption(QCommandLineOption(QStringList() << "t" << "transport", "Command Transport Layer to use.", "tcp|unixsocket|websocket")); cmdParser.addOption(QCommandLineOption(QStringList() << "r" << "reverse", "Enable reverse mode. The ID is used to identify your session in the server.", "ID")); cmdParser.addOption(QCommandLineOption(QStringList() << "s" << "script", "Script to run.", "path")); cmdParser.process(app); if (cmdParser.value("transport").isEmpty()) { qDebug().noquote() << "You must provide a command transport layer"; return -1; } CommandServer *commandServer = new CommandServer(); commandServer->setTransport(cmdParser.value("transport")); commandServer->setReverse(cmdParser.isSet("reverse")); commandServer->setReverseId(cmdParser.value("reverse")); commandServer->initialize(); QWebEngineView *webView = new QWebEngineView; webView->setPage(new WebPage); ElectricWebView::instance()->setWebView(webView); ElectricWebView::instance()->initialize(); QObject::connect(commandServer, &CommandServer::newCommand, ElectricWebView::instance()->commandHandler(), &CommandHandler::processCommand); if (cmdParser.isSet("script")) ElectricWebView::instance()->runScript(cmdParser.value("transport"), cmdParser.value("script")); return app.exec(); }
void MainWindow::openPDFWindow(QString url){ QWebEngineView * pdfView; if(!pdfViewList.contains(url)){ pdfView = new QWebEngineView(0); QUrl theurl = QUrl(url); pdfView->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); pdfView->load( theurl ); pdfView->show(); pdfViewList.insert(url, pdfView); pdfView->setAttribute(Qt::WA_DeleteOnClose); pdfView->showNormal(); int frameHeight = pdfView->frameGeometry().height()-pdfView->geometry().height(); pdfView->move( (screenRect.width() - 640)/2, screenRect.y() ); pdfView->resize( 640, screenRect.height()-frameHeight ); connect(pdfView, SIGNAL(destroyed(QObject*)), this, SLOT(onPDFViewClose(QObject*)) ); //pdfView->settings()->enablePersistentStorage(QDir::tempPath()); QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); }else{
void LoginManager::loginInteractive() { QWebEngineView* webView = new QWebEngineView; webView->setWindowModality(Qt::ApplicationModal); webView->setAttribute(Qt::WA_DeleteOnClose); QWebEnginePage* page = webView->page(); QWebEngineProfile* profile = page->profile(); // TODO: logout in editor does not log out in web view profile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies); profile->setRequestInterceptor(new ApiWebEngineRequestInterceptor(profile)); //workaround for the crashes sometimes happend in Chromium on macOS with Qt 5.12 connect(webView, &QWebEngineView::renderProcessTerminated, this, [profile, webView](QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode) { qDebug() << "Login page loading terminated" << terminationStatus << " " << exitCode; profile->clearHttpCache(); webView->show(); }); connect(page, &QWebEnginePage::loadFinished, this, [this, page, webView](bool ok) { if (!ok) return; constexpr QUrl::FormattingOptions cmpOpt = QUrl::RemoveQuery | QUrl::RemoveFragment | QUrl::StripTrailingSlash; if (!page->url().matches(ApiInfo::loginSuccessUrl, cmpOpt)) return; page->runJavaScript("JSON.stringify(muGetAuthInfo())", [this, page, webView](const QVariant& v) { onLoginReply(nullptr, HTTP_OK, QJsonDocument::fromJson(v.toString().toUtf8()).object()); // We have retrieved an access token, do not remain logged // in with web view profile. page->profile()->cookieStore()->deleteAllCookies(); webView->close(); }); }); webView->load(ApiInfo::loginUrl); webView->show(); }
int main(int argc, char *argv[]) { // инициализация окна QApplication a(argc, argv); QWebEngineView *view = new QWebEngineView(); // размеры окна int WIDTH = 1024; int HEIGHT = 520; // размеры Desktop int screenWidth; int screenHeight; // centered int x, y; // расчет значений Desktop QDesktopWidget *desktop = QApplication::desktop(); screenWidth = desktop->width(); screenHeight = desktop->height(); // новые значения x = (screenWidth - WIDTH) / 2; y = (screenHeight - HEIGHT) / 2; // центрируем window view->resize(WIDTH, HEIGHT); view->move(x, y); // title window view->setWindowTitle("Игра жизнь"); // отключаем ненужные Qt события view->setContextMenuPolicy(Qt::CustomContextMenu); // подгружаем визуализацию view->load(QUrl("qrc:live.html")); view->show(); return a.exec(); }
void tst_QWebEngineView::renderHints() { #if !defined(QWEBENGINEVIEW_RENDERHINTS) QSKIP("QWEBENGINEVIEW_RENDERHINTS"); #else QWebEngineView webView; // default is only text antialiasing + smooth pixmap transform QVERIFY(!(webView.renderHints() & QPainter::Antialiasing)); QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); webView.setRenderHint(QPainter::Antialiasing, true); QVERIFY(webView.renderHints() & QPainter::Antialiasing); QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); webView.setRenderHint(QPainter::Antialiasing, false); QVERIFY(!(webView.renderHints() & QPainter::Antialiasing)); QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); webView.setRenderHint(QPainter::SmoothPixmapTransform, true); QVERIFY(!(webView.renderHints() & QPainter::Antialiasing)); QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); webView.setRenderHint(QPainter::SmoothPixmapTransform, false); QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); QVERIFY(!(webView.renderHints() & QPainter::SmoothPixmapTransform)); QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); #endif }
void GUIHelpViewer::show() { QWebEngineView *view = new QWebEngineView(); view->load(QUrl(this->currentUrl)); view->show(); }
// ============= QWebEngine ==================== extern "C" MSVC_API void qteQWebEng_init() { QWebEngineView *view = new QWebEngineView(NULL); view->load(QUrl("http://qt-project.org/")); view->show(); }
void QRestClient::displayHtml(QByteArray html) { QWebEngineView *view = new QWebEngineView(); view->setAttribute(Qt::WA_DeleteOnClose); view->setHtml(html); view->show(); }