From 02b34502e19d0035f6b4e34b340ee57f91ac0806 Mon Sep 17 00:00:00 2001 From: JackLee <809262979@qq.com> Date: Wed, 19 Mar 2025 22:47:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9QCefView=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81,=E5=B7=B2=E7=9F=A5BUG,=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdparty/CefViewCore/include/CefVersion.h | 10 +- .../lib/libcef_dll_wrapper.a | Bin 6749026 -> 6744678 bytes CMakeLists.txt | 2 +- src/Cef/CefViewWidget.cpp | 6 +- src/Cef/CefViewWidget.h | 6 +- src/Cef/CefWidget.cpp | 137 +------- src/Cef/CefWidget.h | 54 +-- ...ownloadManager.cpp => DownloadManager.cpp} | 20 +- ...CefDownloadManager.h => DownloadManager.h} | 12 +- src/Cef/MainWindow.cpp | 317 ++++++++++++++++++ src/Cef/MainWindow.h | 77 +++++ src/Cef/MainWindow.ui | 250 ++++++++++++++ src/compatibility.manifest | 20 ++ src/ctai.exe.manifest | 20 ++ src/main.cpp | 119 ++----- 15 files changed, 768 insertions(+), 282 deletions(-) rename src/Cef/{CefDownloadManager.cpp => DownloadManager.cpp} (70%) rename src/Cef/{CefDownloadManager.h => DownloadManager.h} (65%) create mode 100644 src/Cef/MainWindow.cpp create mode 100644 src/Cef/MainWindow.h create mode 100644 src/Cef/MainWindow.ui create mode 100644 src/compatibility.manifest create mode 100644 src/ctai.exe.manifest diff --git a/3rdparty/CefViewCore/include/CefVersion.h b/3rdparty/CefViewCore/include/CefVersion.h index 705594b..da85c65 100644 --- a/3rdparty/CefViewCore/include/CefVersion.h +++ b/3rdparty/CefViewCore/include/CefVersion.h @@ -13,12 +13,12 @@ #pragma once // clang-format off -#define CEF_VERSION "134.3.2+g615db2f+chromium-134.0.6998.89" -#define CEF_VERSION_MAJOR 134 +#define CEF_VERSION "127.3.5+g114ea2a+chromium-127.0.6533.120" +#define CEF_VERSION_MAJOR 127 #define CEF_VERSION_MINOR 3 -#define CEF_VERSION_PATCH 2 -#define CEF_COMMIT_NUMBER 3151 -#define CEF_COMMIT_HASH "615db2f583e46822d28a4f2a57c3ef7316c5b17d" +#define CEF_VERSION_PATCH 5 +#define CEF_COMMIT_NUMBER 3037 +#define CEF_COMMIT_HASH "114ea2af1ba9da18c4ac5e599ccdbb17d01ba75a" // clang-format on #endif // CefVersion diff --git a/3rdparty/libcef_dll_wrapper/lib/libcef_dll_wrapper.a b/3rdparty/libcef_dll_wrapper/lib/libcef_dll_wrapper.a index e47177ddcb47c3c029d9023222bc1d767b7eab83..92a9bb74ae73de5c5860ada5fa78a6fc8e0b5871 100644 GIT binary patch delta 121883 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�l(C?x?nmh>!lC>=4#tqD!Pgf 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 z%0A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 X@70xJj=MT8FUrr^UX(xOoBRGB^_`;# diff --git a/CMakeLists.txt b/CMakeLists.txt index 33a2ef4..5457050 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,7 +94,7 @@ MESSAGE(STATUS "---------- END---------------") #增加sui的cpp FILE(GLOB src_sui "${PROJECT_SOURCE_DIR}/src/*.*") -FILE(GLOB browser "${PROJECT_SOURCE_DIR}/src/Cef/*.*") +FILE(GLOB browser "${PROJECT_SOURCE_DIR}/src/cef/*.*") SET(PROJECT_SOURCES ${browser} ${src_sui}) # 设置消息策略为qFatal来禁用qDebug信息 diff --git a/src/Cef/CefViewWidget.cpp b/src/Cef/CefViewWidget.cpp index fe2a4cc..bf1b892 100644 --- a/src/Cef/CefViewWidget.cpp +++ b/src/Cef/CefViewWidget.cpp @@ -14,7 +14,7 @@ #include #include -#include "CefDownloadManager.h" +#include "DownloadManager.h" CefViewWidget::CefViewWidget(const QString url, const QCefSetting* setting, QWidget* parent /* = 0*/) : QCefView(url, setting, parent) @@ -74,7 +74,7 @@ CefViewWidget::onNewDownloadItem(const QSharedPointer& item, c { // keep the item into list or map, and call item->start() to allow the download - CefDownloadManager::getInstance().AddNewDownloadItem(item); + DownloadManager::getInstance().AddNewDownloadItem(item); } void @@ -83,7 +83,7 @@ CefViewWidget::onUpdateDownloadItem(const QSharedPointer& item // control the download by invoking item->pause(), item->resume(), item->cancel() - CefDownloadManager::getInstance().UpdateDownloadItem(item); + DownloadManager::getInstance().UpdateDownloadItem(item); } void diff --git a/src/Cef/CefViewWidget.h b/src/Cef/CefViewWidget.h index be60d87..7c25899 100644 --- a/src/Cef/CefViewWidget.h +++ b/src/Cef/CefViewWidget.h @@ -1,5 +1,5 @@ -#ifndef CEFVIEWWIDGET_H -#define CEFVIEWWIDGET_H +#ifndef CUSTOMCEFVIEW_H +#define CUSTOMCEFVIEW_H #include @@ -13,7 +13,7 @@ class CefViewWidget : public QCefView Q_OBJECT public: - CefViewWidget(const QString url, const QCefSetting* setting, QWidget* parent = 0); + CefViewWidget(const QString url, const QCefSetting* setting, QWidget* parent = 0); ~CefViewWidget(); diff --git a/src/Cef/CefWidget.cpp b/src/Cef/CefWidget.cpp index b06857b..96e990e 100644 --- a/src/Cef/CefWidget.cpp +++ b/src/Cef/CefWidget.cpp @@ -1,149 +1,30 @@ #include "CefWidget.h" -CefWidget::CefWidget(QWidget* parent) -: QMainWindow(parent /*, Qt::FramelessWindowHint*/) +CefWidget::CefWidget(QWidget *parent) + : QWidget(parent) { - initBrowser(); + QWidget* widget = new QWidget(); + + this->layout()->addWidget(widget); } + CefWidget::~CefWidget() { -} -void CefWidget::initBrowser() -{ - m_centralWidget = new QWidget(this); - if (m_viewWidget) { - m_viewWidget->deleteLater(); - m_viewWidget = nullptr; - } - - QCefSetting setting; - setting.setWindowlessFrameRate(1000); - setting.setHardwareAcceleration(false); - // setting.setBackgroundColor(Qt::magenta); - - m_viewWidget = new CefViewWidget("https://www.baidu.com/", &setting, this); - // connect the invokeMethod to the slot - // connect(m_viewWidget, &QCefView::invokeMethod, this, &CefWidget::onInvokeMethod); - - // // connect the cefQueryRequest to the slot - // connect(m_viewWidget, &QCefView::cefUrlRequest, this, &CefWidget::onQCefUrlRequest); - // connect(m_viewWidget, &QCefView::cefQueryRequest, this, &CefWidget::onQCefQueryRequest); - // connect(m_viewWidget, &QCefView::reportJavascriptResult, this, &CefWidget::onJavascriptResult); - // connect(m_viewWidget, &QCefView::loadStart, this, &CefWidget::onLoadStart); - // connect(m_viewWidget, &QCefView::loadEnd, this, &CefWidget::onLoadEnd); - // connect(m_viewWidget, &QCefView::loadError, this, &CefWidget::onLoadError); - m_centralWidget->layout()->addWidget(m_viewWidget); - setCentralWidget(m_centralWidget); -} -void -CefWidget::onInvokeMethod(const QCefBrowserId& browserId, - const QCefFrameId& frameId, - const QString& method, - const QVariantList& arguments) -{ - // extract the arguments and dispatch the invocation to corresponding handler - if (0 == method.compare("TestMethod")) { - QString title("QCef InvokeMethod Notify"); - QString text = QString("================== Current Thread: QT_UI ==================\r\n" - "Frame: %1\r\n" - "Method: %2\r\n" - "Arguments:\r\n") - .arg(frameId) - .arg(method); - for (int i = 0; i < arguments.size(); i++) { - auto jv = QJsonValue::fromVariant(arguments[i]); - - // clang-format off - text.append( - QString("%1 Type:%2, Value:%3\r\n") - .arg(i).arg(arguments[i].typeName()).arg(arguments[i].toString()) - ); - // clang-format on - } - - auto jsonValue = QJsonDocument::fromVariant(arguments); - auto jsonString = QString(jsonValue.toJson()); - text.append(QString("\r\nArguments List in JSON format:\r\n%1").arg(jsonString)); - - QMessageBox::information(this->window(), title, text); - } else { - } } -void -CefWidget::onQCefUrlRequest(const QCefBrowserId& browserId, const QCefFrameId& frameId, const QString& url) +void CefWidget::WaitCefQuit() { - QString title("QCef URL Request"); - QString text = QString("Current Thread: QT_UI\r\n" - "URL: %1") - .arg(url); - QMessageBox::information(this->window(), title, text); } -void -CefWidget::onQCefQueryRequest(const QCefBrowserId& browserId, const QCefFrameId& frameId, const QCefQuery& query) +void CefWidget::resizeEvent(QResizeEvent *ev) { - QString title("QCef Query Request"); - QString text = QString("Current Thread: QT_UI\r\n" - "Query: %1") - .arg(query.request()); - - QMessageBox::information(this->window(), title, text); - - QString response = query.request().toUpper(); - query.setResponseResult(true, response); - m_viewWidget->responseQCefQuery(query); } -void -CefWidget::onJavascriptResult(const QCefBrowserId& browserId, - const QCefFrameId& frameId, - const QString& context, - const QVariant& result) +void CefWidget::closeEvent(QCloseEvent* ev) { - auto jsonValue = QJsonDocument::fromVariant(result); - auto jsonString = QString(jsonValue.toJson()); - QString title("Javascript result notification"); - QString text = QString("Context: %1\r\nResult in JSON format:\r\n%2").arg(context).arg(jsonString); - - QMessageBox::information(this->window(), title, text); } -void -CefWidget::onLoadingStateChanged(const QCefBrowserId& browserId, bool isLoading, bool canGoBack, bool canGoForward) -{ - qDebug() << "onLoadingStateChanged, browserId:" << browserId << ", isLoading:" << isLoading - << ", canGoBack:" << canGoBack << ", canGoForward:" << canGoForward; -} -void -CefWidget::onLoadStart(const QCefBrowserId& browserId, - const QCefFrameId& frameId, - bool isMainFrame, - int transitionType) -{ - qDebug() << "onLoadStart, browserId:" << browserId << ", frameId:" << frameId << ", isMainFrame:" << isMainFrame - << ", transitionType:" << transitionType; -} - -void -CefWidget::onLoadEnd(const QCefBrowserId& browserId, const QCefFrameId& frameId, bool isMainFrame, int httpStatusCode) -{ - qDebug() << "onLoadEnd, browserId:" << browserId << ", frameId:" << frameId << ", isMainFrame:" << isMainFrame - << ", httpStatusCode:" << httpStatusCode; -} - -void -CefWidget::onLoadError(const QCefBrowserId& browserId, - const QCefFrameId& frameId, - bool isMainFrame, - int errorCode, - const QString& errorMsg, - const QString& failedUrl) -{ - qDebug() << "onLoadError, browserId:" << browserId << ", frameId:" << frameId << ", isMainFrame:" << isMainFrame - << ", errorCode:" << errorCode; -} \ No newline at end of file diff --git a/src/Cef/CefWidget.h b/src/Cef/CefWidget.h index 1a88f97..53d403f 100644 --- a/src/Cef/CefWidget.h +++ b/src/Cef/CefWidget.h @@ -1,53 +1,23 @@ -#ifndef BROWSER_H -#define BROWSER_H +#ifndef CEFWIDGET_H +#define CEFWIDGET_H #include -#include -#include -#include -#include -#include "CefviewWidget.h" -#include -class CefWidget : public QMainWindow +#include +#include + +class CefWidget : public QWidget { Q_OBJECT public: CefWidget(QWidget *parent = nullptr); ~CefWidget(); - + void WaitCefQuit(); private: void initBrowser(); - CefViewWidget* m_viewWidget={}; - QWidget* m_centralWidget={}; - // QCefView slots -protected slots: - void onInvokeMethod(const QCefBrowserId &browserId, - const QCefFrameId &frameId, - const QString &method, - const QVariantList &arguments); - - void onQCefUrlRequest(const QCefBrowserId &browserId, const QCefFrameId &frameId, const QString &url); - - void onQCefQueryRequest(const QCefBrowserId &browserId, const QCefFrameId &frameId, const QCefQuery &query); - - void onJavascriptResult(const QCefBrowserId &browserId, - const QCefFrameId &frameId, - const QString &context, - const QVariant &result); - - void onLoadingStateChanged(const QCefBrowserId &browserId, bool isLoading, bool canGoBack, bool canGoForward); - - void onLoadStart(const QCefBrowserId &browserId, const QCefFrameId &frameId, bool isMainFrame, int transitionType); - - void onLoadEnd(const QCefBrowserId &browserId, const QCefFrameId &frameId, bool isMainFrame, int httpStatusCode); - - void onLoadError(const QCefBrowserId &browserId, - const QCefFrameId &frameId, - bool isMainFrame, - int errorCode, - const QString &errorMsg, - const QString &failedUrl); - + //CefRefPtr simple_handler_; + QWidget* widget; +protected: + void resizeEvent(QResizeEvent *event) override; + void closeEvent(QCloseEvent* ev) override; }; - #endif \ No newline at end of file diff --git a/src/Cef/CefDownloadManager.cpp b/src/Cef/DownloadManager.cpp similarity index 70% rename from src/Cef/CefDownloadManager.cpp rename to src/Cef/DownloadManager.cpp index d21b565..38ada2a 100644 --- a/src/Cef/CefDownloadManager.cpp +++ b/src/Cef/DownloadManager.cpp @@ -1,18 +1,18 @@ -#include "CefDownloadManager.h" +#include "DownloadManager.h" #include -CefDownloadManager& -CefDownloadManager::getInstance() +DownloadManager& +DownloadManager::getInstance() { - static CefDownloadManager s_instance; + static DownloadManager s_instance; return s_instance; } void -CefDownloadManager::AddNewDownloadItem(const QSharedPointer& item) +DownloadManager::AddNewDownloadItem(const QSharedPointer& item) { - qDebug() << "downloadManager::AddNewDownloadItem:" + qDebug() << "DownloadManager::AddNewDownloadItem:" << " id: " << item->id() << "\n" << " name: " << item->suggestedFileName() << "\n" << " path: " << item->fullPath() << "\n" @@ -26,9 +26,9 @@ CefDownloadManager::AddNewDownloadItem(const QSharedPointer& i } void -CefDownloadManager::UpdateDownloadItem(const QSharedPointer& item) +DownloadManager::UpdateDownloadItem(const QSharedPointer& item) { - qDebug() << "downloadManager::UpdateDownloadItem:" + qDebug() << "DownloadManager::UpdateDownloadItem:" << " id: " << item->id() << "\n" << " name: " << item->suggestedFileName() << "\n" << " path: " << item->fullPath() << "\n" @@ -41,9 +41,9 @@ CefDownloadManager::UpdateDownloadItem(const QSharedPointer& i m_mapDownloadingItem.remove(item->id()); } -CefDownloadManager::CefDownloadManager() {} +DownloadManager::DownloadManager() {} -CefDownloadManager::~CefDownloadManager() +DownloadManager::~DownloadManager() { for (auto& item : m_mapDownloadingItem) { item->cancel(); diff --git a/src/Cef/CefDownloadManager.h b/src/Cef/DownloadManager.h similarity index 65% rename from src/Cef/CefDownloadManager.h rename to src/Cef/DownloadManager.h index 048d20c..e21c76d 100644 --- a/src/Cef/CefDownloadManager.h +++ b/src/Cef/DownloadManager.h @@ -1,5 +1,5 @@ -#ifndef CEFDOWNLOADMANAGER_H -#define CEFDOWNLOADMANAGER_H +#ifndef DOWNLOADMANAGER_H +#define DOWNLOADMANAGER_H #pragma once #include @@ -7,18 +7,18 @@ #include -class CefDownloadManager +class DownloadManager { public: - static CefDownloadManager& getInstance(); + static DownloadManager& getInstance(); void AddNewDownloadItem(const QSharedPointer& item); void UpdateDownloadItem(const QSharedPointer& item); private: - CefDownloadManager(); - ~CefDownloadManager(); + DownloadManager(); + ~DownloadManager(); QMap> m_mapDownloadingItem; }; diff --git a/src/Cef/MainWindow.cpp b/src/Cef/MainWindow.cpp new file mode 100644 index 0000000..f61893b --- /dev/null +++ b/src/Cef/MainWindow.cpp @@ -0,0 +1,317 @@ +#include "MainWindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define URL_ROOT "http://QCefViewDoc" +#define LEFT_INDEX_URL URL_ROOT "/left.html" +#define RIGHT_INDEX_URL URL_ROOT "/right.html" + +MainWindow::MainWindow(QWidget* parent) + : QMainWindow(parent /*, Qt::FramelessWindowHint*/) +{ + m_ui.setupUi(this); + +#ifdef Q_OS_MACOS + this->m_ui.nativeContainer->setContentsMargins(0, 28, 0, 0); +#endif + + setupWindow(); + + // setWindowFlags(Qt::FramelessWindowHint); + // setAttribute(Qt::WA_TranslucentBackground); + + connect(m_ui.btn_showDevTools, &QPushButton::clicked, this, &MainWindow::onBtnShowDevToolsClicked); + connect(m_ui.btn_reloadRight, &QPushButton::clicked, this, &MainWindow::onBtnReloadRightViewClicked); + connect(m_ui.btn_recreateRight, &QPushButton::clicked, this, &MainWindow::onBtnRecreateRightViewClicked); + connect(m_ui.btn_changeColor, &QPushButton::clicked, this, &MainWindow::onBtnChangeColorClicked); + connect(m_ui.btn_setFocus, &QPushButton::clicked, this, &MainWindow::onBtnSetFocusClicked); + connect(m_ui.btn_callJSCode, &QPushButton::clicked, this, &MainWindow::onBtnCallJSCodeClicked); + connect(m_ui.btn_newBrowser, &QPushButton::clicked, this, &MainWindow::onBtnNewBrowserClicked); + connect(m_ui.btn_quitApp, &QPushButton::clicked, qApp, &QCoreApplication::quit); + + // build the path to the web resource + QDir dir = QCoreApplication::applicationDirPath(); +#if defined(Q_OS_MACOS) + QString webResourceDir = /*QString("file://") +*/ QDir::toNativeSeparators(dir.filePath("../Resources/webres")); +#else + QString webResourceDir = /*QString("file://") +*/ QDir::toNativeSeparators(dir.filePath("webres")); +#endif + + // add a local folder to URL map (global) + QCefContext::instance()->addLocalFolderResource(webResourceDir, URL_ROOT); + + createLeftCefView(); + createRightCefView(); +} + +MainWindow::~MainWindow() {} + +void +MainWindow::createLeftCefView() +{ + if (m_pLeftCefViewWidget) { + m_pLeftCefViewWidget->deleteLater(); + m_pLeftCefViewWidget = nullptr; + } + + QCefSetting setting; + setting.setWindowlessFrameRate(1000); + setting.setHardwareAcceleration(false); + // setting.setBackgroundColor(Qt::magenta); + + m_pLeftCefViewWidget = new CefViewWidget("https://www.testufo.com/", &setting, this); + // connect the invokeMethod to the slot + connect(m_pLeftCefViewWidget, &QCefView::invokeMethod, this, &MainWindow::onInvokeMethod); + + // connect the cefQueryRequest to the slot + connect(m_pLeftCefViewWidget, &QCefView::cefUrlRequest, this, &MainWindow::onQCefUrlRequest); + connect(m_pLeftCefViewWidget, &QCefView::cefQueryRequest, this, &MainWindow::onQCefQueryRequest); + connect(m_pLeftCefViewWidget, &QCefView::reportJavascriptResult, this, &MainWindow::onJavascriptResult); + connect(m_pLeftCefViewWidget, &QCefView::loadStart, this, &MainWindow::onLoadStart); + connect(m_pLeftCefViewWidget, &QCefView::loadEnd, this, &MainWindow::onLoadEnd); + connect(m_pLeftCefViewWidget, &QCefView::loadError, this, &MainWindow::onLoadError); + + m_ui.leftCefViewContainer->layout()->addWidget(m_pLeftCefViewWidget); +} + +void +MainWindow::createRightCefView() +{ + if (m_pRightCefViewWidget) { + m_pRightCefViewWidget->deleteLater(); + m_pRightCefViewWidget = nullptr; + } + + // build settings for per QCefView + QCefSetting setting; +#if CEF_VERSION_MAJOR < 100 + setting.setPlugins(false); +#endif + setting.setWindowlessFrameRate(1000); + setting.setHardwareAcceleration(true); + QColor background(0, 255, 0, 255); + setting.setBackgroundColor(background); + + // create the QCefView widget and add it to the layout container + // m_pRightCefViewWidget = new QCefView(RIGHT_INDEX_URL, &setting, this); + m_pRightCefViewWidget = new QCefView("https://www.testufo.com/", &setting, this); + + // auto vl = new QVBoxLayout(m_pRightCefViewWidget); + // auto btn = new QPushButton("TEST BUTTON OVERLAY", m_pRightCefViewWidget); + //// btn->setFixedSize(320, 240); + // btn->setStyleSheet("background-color: rgba(1, 1, 1, 0);"); + // btn->setAttribute(Qt::WA_TranslucentBackground); + // btn->setWindowFlags(Qt::FramelessWindowHint); + // btn->setAttribute(Qt::WA_NoSystemBackground); + // vl->setAlignment(Qt::AlignVCenter); + + // vl->addWidget(btn); + // m_pRightCefViewWidget->setLayout(vl); + + // all the following values will disable the context menu for both NCW and OSR mode + // m_pRightCefViewWidget->setContextMenuPolicy(Qt::NoContextMenu); + // m_pRightCefViewWidget->setContextMenuPolicy(Qt::ActionsContextMenu); + // m_pRightCefViewWidget->setContextMenuPolicy(Qt::CustomContextMenu); + // m_pRightCefViewWidget->setContextMenuPolicy(Qt::PreventContextMenu); + m_pRightCefViewWidget->setContextMenuPolicy(Qt::DefaultContextMenu); + + // add the QCefView widget to the layout + m_ui.rightCefViewContainer->layout()->addWidget(m_pRightCefViewWidget); +} + +void +MainWindow::onInvokeMethod(const QCefBrowserId& browserId, + const QCefFrameId& frameId, + const QString& method, + const QVariantList& arguments) +{ + // extract the arguments and dispatch the invocation to corresponding handler + if (0 == method.compare("TestMethod")) { + QString title("QCef InvokeMethod Notify"); + QString text = QString("================== Current Thread: QT_UI ==================\r\n" + "Frame: %1\r\n" + "Method: %2\r\n" + "Arguments:\r\n") + .arg(frameId) + .arg(method); + + for (int i = 0; i < arguments.size(); i++) { + auto jv = QJsonValue::fromVariant(arguments[i]); + + // clang-format off + text.append( + QString("%1 Type:%2, Value:%3\r\n") + .arg(i).arg(arguments[i].typeName()).arg(arguments[i].toString()) + ); + // clang-format on + } + + auto jsonValue = QJsonDocument::fromVariant(arguments); + auto jsonString = QString(jsonValue.toJson()); + text.append(QString("\r\nArguments List in JSON format:\r\n%1").arg(jsonString)); + + QMessageBox::information(this->window(), title, text); + } else { + } +} + +void +MainWindow::onQCefUrlRequest(const QCefBrowserId& browserId, const QCefFrameId& frameId, const QString& url) +{ + QString title("QCef URL Request"); + QString text = QString("Current Thread: QT_UI\r\n" + "URL: %1") + .arg(url); + + QMessageBox::information(this->window(), title, text); +} + +void +MainWindow::onQCefQueryRequest(const QCefBrowserId& browserId, const QCefFrameId& frameId, const QCefQuery& query) +{ + QString title("QCef Query Request"); + QString text = QString("Current Thread: QT_UI\r\n" + "Query: %1") + .arg(query.request()); + + QMessageBox::information(this->window(), title, text); + + QString response = query.request().toUpper(); + query.setResponseResult(true, response); + m_pLeftCefViewWidget->responseQCefQuery(query); +} + +void +MainWindow::onJavascriptResult(const QCefBrowserId& browserId, + const QCefFrameId& frameId, + const QString& context, + const QVariant& result) +{ + auto jsonValue = QJsonDocument::fromVariant(result); + auto jsonString = QString(jsonValue.toJson()); + + QString title("Javascript result notification"); + QString text = QString("Context: %1\r\nResult in JSON format:\r\n%2").arg(context).arg(jsonString); + + QMessageBox::information(this->window(), title, text); +} + +void +MainWindow::onLoadingStateChanged(const QCefBrowserId& browserId, bool isLoading, bool canGoBack, bool canGoForward) +{ + qDebug() << "onLoadingStateChanged, browserId:" << browserId << ", isLoading:" << isLoading + << ", canGoBack:" << canGoBack << ", canGoForward:" << canGoForward; +} + +void +MainWindow::onLoadStart(const QCefBrowserId& browserId, + const QCefFrameId& frameId, + bool isMainFrame, + int transitionType) +{ + qDebug() << "onLoadStart, browserId:" << browserId << ", frameId:" << frameId << ", isMainFrame:" << isMainFrame + << ", transitionType:" << transitionType; +} + +void +MainWindow::onLoadEnd(const QCefBrowserId& browserId, const QCefFrameId& frameId, bool isMainFrame, int httpStatusCode) +{ + qDebug() << "onLoadEnd, browserId:" << browserId << ", frameId:" << frameId << ", isMainFrame:" << isMainFrame + << ", httpStatusCode:" << httpStatusCode; +} + +void +MainWindow::onLoadError(const QCefBrowserId& browserId, + const QCefFrameId& frameId, + bool isMainFrame, + int errorCode, + const QString& errorMsg, + const QString& failedUrl) +{ + qDebug() << "onLoadError, browserId:" << browserId << ", frameId:" << frameId << ", isMainFrame:" << isMainFrame + << ", errorCode:" << errorCode; +} + +void +MainWindow::onBtnShowDevToolsClicked() +{ + if (m_pLeftCefViewWidget) { + m_pLeftCefViewWidget->showDevTools(); + } +} + +void +MainWindow::onBtnReloadRightViewClicked() +{ + if (m_pRightCefViewWidget) { + m_pRightCefViewWidget->navigateToUrl("https://www.google.com"); + } +} + +void +MainWindow::onBtnRecreateRightViewClicked() +{ + createRightCefView(); +} + +void +MainWindow::onBtnChangeColorClicked() +{ + if (m_pLeftCefViewWidget) { + // create a random color + QColor color(QRandomGenerator::global()->generate()); + + // create the cef event and set the arguments + QCefEvent event("colorChange"); + event.arguments().append(QVariant::fromValue(color.name(QColor::HexArgb))); + + // broadcast the event to all frames in all browsers created by this QCefView widget + m_pLeftCefViewWidget->broadcastEvent(event); + } +} + +void +MainWindow::onBtnCallJSCodeClicked() +{ + QString context = "helloQCefView"; + QString code = "alert('hello QCefView'); return {k1: 'str', k2: true, k3: 100};"; + m_pLeftCefViewWidget->executeJavascriptWithResult(QCefView::MainFrameID, code, "", context); +} + +void +MainWindow::onBtnSetFocusClicked() +{ + if (m_pLeftCefViewWidget) { + m_pLeftCefViewWidget->setFocus(); + } +} + +void +MainWindow::onBtnNewBrowserClicked() +{ + QMainWindow* w = new QMainWindow(nullptr); + w->setAttribute(Qt::WA_DeleteOnClose); + + QCefSetting settings; + QCefView* view = new QCefView("https://cefview.github.io/QCefView/", &settings, w); + + w->setCentralWidget(view); + w->resize(1024, 768); + w->show(); +} + +#ifndef Q_OS_MACOS +void +MainWindow::setupWindow() +{ +} +#endif diff --git a/src/Cef/MainWindow.h b/src/Cef/MainWindow.h new file mode 100644 index 0000000..019e16c --- /dev/null +++ b/src/Cef/MainWindow.h @@ -0,0 +1,77 @@ +#ifndef QCEFVIEWTEST_H +#define QCEFVIEWTEST_H + +#include +#include + +#include "ui_MainWindow.h" + +#include "CefViewWidget.h" + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget* parent = 0); + ~MainWindow(); + +protected: + void createLeftCefView(); + void createRightCefView(); + void setupWindow(); + + // QCefView slots +protected slots: + + void onInvokeMethod(const QCefBrowserId& browserId, + const QCefFrameId& frameId, + const QString& method, + const QVariantList& arguments); + + void onQCefUrlRequest(const QCefBrowserId& browserId, const QCefFrameId& frameId, const QString& url); + + void onQCefQueryRequest(const QCefBrowserId& browserId, const QCefFrameId& frameId, const QCefQuery& query); + + void onJavascriptResult(const QCefBrowserId& browserId, + const QCefFrameId& frameId, + const QString& context, + const QVariant& result); + + void onLoadingStateChanged(const QCefBrowserId& browserId, bool isLoading, bool canGoBack, bool canGoForward); + + void onLoadStart(const QCefBrowserId& browserId, const QCefFrameId& frameId, bool isMainFrame, int transitionType); + + void onLoadEnd(const QCefBrowserId& browserId, const QCefFrameId& frameId, bool isMainFrame, int httpStatusCode); + + void onLoadError(const QCefBrowserId& browserId, + const QCefFrameId& frameId, + bool isMainFrame, + int errorCode, + const QString& errorMsg, + const QString& failedUrl); + + // ui slots +protected slots: + void onBtnShowDevToolsClicked(); + + void onBtnReloadRightViewClicked(); + + void onBtnRecreateRightViewClicked(); + + void onBtnChangeColorClicked(); + + void onBtnSetFocusClicked(); + + void onBtnCallJSCodeClicked(); + + void onBtnNewBrowserClicked(); + +private: + Ui::MainWindow m_ui; + + QCefView* m_pLeftCefViewWidget = nullptr; + QCefView* m_pRightCefViewWidget = nullptr; +}; + +#endif // QCEFVIEWTEST_H diff --git a/src/Cef/MainWindow.ui b/src/Cef/MainWindow.ui new file mode 100644 index 0000000..8aefc20 --- /dev/null +++ b/src/Cef/MainWindow.ui @@ -0,0 +1,250 @@ + + + MainWindow + + + + 0 + 0 + 1280 + 900 + + + + QCefViewTest + + + + + 3 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 0 + 0 + + + + + #nativeContainer { + background-color: rgb(170, 255, 255); + } + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + #label{ + font: 12pt "MS Shell Dlg 2"; + } + + + + Native Area + + + Qt::AlignCenter + + + + + + + Show Left DevTools + + + + + + + Reload Right QCefView + + + + + + + Recreate Right QCefView + + + + + + + ChangeColor + + + + + + + + + + SetFocus + + + + + + + + + + CallJSCode + + + + + + + + + + NewBrowser + + + + + + + Exit App + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + 0 + + + + QFrame::Plain + + + Qt::Horizontal + + + + QWidget#leftCefViewContainer { + background-color: rgb(217, 183, 255); +} + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + QWidget#rightCefViewContainer { + background-color: rgb(217, 183, 255); +} + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + btn_showDevTools + btn_reloadRight + btn_recreateRight + btn_changeColor + lineEdit + lineEdit_2 + btn_callJSCode + lineEdit_3 + btn_newBrowser + btn_quitApp + + + + diff --git a/src/compatibility.manifest b/src/compatibility.manifest new file mode 100644 index 0000000..755c272 --- /dev/null +++ b/src/compatibility.manifest @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/ctai.exe.manifest b/src/ctai.exe.manifest new file mode 100644 index 0000000..d36f084 --- /dev/null +++ b/src/ctai.exe.manifest @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main.cpp b/src/main.cpp index fd7ad2f..3251c09 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,83 +4,34 @@ #include "sui_base_ex.h" #include "ctai.h" #include -#include "QCefContext.h" -#include "Cef/CefWidget.h" -// void init_Browser(QApplication& instance,int argc, char *argv[]){ -// // build QCefConfig -// QCefConfig config; -// // set user agent -// config.setUserAgent("QCefViewTest"); -// // set log level -// config.setLogLevel(QCefConfig::LOGSEVERITY_DEFAULT); -// // set JSBridge object name (default value is CefViewClient) -// config.setBridgeObjectName("CallBridge"); -// // set Built-in scheme name (default value is CefView) -// config.setBuiltinSchemeName("CefView"); -// // port for remote debugging (default is 0 and means to disable remote debugging) -// //config.setRemoteDebuggingPort(9000); -// // set background color for all browsers -// // (QCefSetting.setBackgroundColor will overwrite this value for specified browser instance) -// // config.setBackgroundColor(Qt::lightGray); - -// // WindowlessRenderingEnabled is set to true by default, -// // set to false to disable the OSR mode -// //config.setWindowlessRenderingEnabled(true); -// //config.addCommandLineSwitch("no-sandbox"); -// // add command line args, you can any cef supported switches or parameters -// //config.addCommandLineSwitch("use-mock-keychain"); -// //config.addCommandLineSwitch("disable-gpu"); -// // config.addCommandLineSwitch("enable-media-stream"); -// // config.addCommandLineSwitch("allow-file-access-from-files"); -// // config.addCommandLineSwitch("disable-spell-checking"); -// // config.addCommandLineSwitch("disable-site-isolation-trials"); -// // config.addCommandLineSwitch("enable-aggressive-domstorage-flushing"); -// //config.addCommandLineSwitchWithValue("renderer-process-limit", "1"); -// // allow remote debugging -// //config.addCommandLineSwitchWithValue("remote-allow-origins", "*"); -// // config.addCommandLineSwitchWithValue("disable-features", "BlinkGenPropertyTrees,TranslateUI,site-per-process"); - -// // set cache folder -// config.setCachePath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)); - -// // create QCefContext instance with config, -// // the lifecycle of cefContext must be the same as QApplication instance -// QCefContext cefContext(&instance, argc, argv, &config); -// } -// int main(int argc, char *argv[]) -// { -// QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); -// qputenv("QT_QPA_PLATFORM", "windows:fontengine=freetype"); -// QApplication a(argc, argv); -// //加载语言包 -// QTranslator qtBaseTranslator; -// if (!qtBaseTranslator.load(QStringLiteral(":/res/translator/qtbase_zh_CN.qm"))) -// { -// // 处理加载翻译文件失败的情况 -// qDebug() << "Failed to load translation file."; -// return -1; -// } -// a.installTranslator(&qtBaseTranslator); -// //初始化浏览器 -// init_Browser(a,argc,argv); -// //读取窗体的配置并初始化 -// sui_init_config(); -// ctai x; -// x.init_layout(); -// // 仅限于windows平台 -// #if defined(__WIN32__) -// x.title()->set_type(QD_TYPE::QD_EXIT); -// #endif -// x.show(); -// CefWidget w; -// w.show(); -// return a.exec(); -// } #include -int -main(int argc, char* argv[]) +#include "cef/MainWindow.h" + +int main(int argc, char *argv[]) { -#if (QT_VERSION <= QT_VERSION_CHECK(6, 0, 0)) + QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); + qputenv("QT_QPA_PLATFORM", "windows:fontengine=freetype"); + QApplication a(argc, argv); + // 加载语言包 + QTranslator qtBaseTranslator; + if (!qtBaseTranslator.load(QStringLiteral(":/res/translator/qtbase_zh_CN.qm"))) + { + // 处理加载翻译文件失败的情况 + qDebug() << "Failed to load translation file."; + return -1; + } + a.installTranslator(&qtBaseTranslator); + // 读取窗体的配置并初始化 + sui_init_config(); + ctai x; + x.init_layout(); + // 仅限于windows平台 +#if defined(__WIN32__) + x.title()->set_type(QD_TYPE::QD_EXIT); +#endif + x.show(); + //初始化CEF + #if (QT_VERSION <= QT_VERSION_CHECK(6, 0, 0)) // For off-screen rendering, Qt::AA_EnableHighDpiScaling must be enabled. If not, // then all devicePixelRatio methods will always return 1.0, // so CEF will not scale the web content @@ -90,10 +41,6 @@ main(int argc, char* argv[]) QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); #endif #endif - - // create QApplication instance - QApplication a(argc, argv); - // build QCefConfig QCefConfig config; // set user agent @@ -113,9 +60,16 @@ main(int argc, char* argv[]) // WindowlessRenderingEnabled is set to true by default, // set to false to disable the OSR mode config.setWindowlessRenderingEnabled(true); - // add command line args, you can any cef supported switches or parameters config.addCommandLineSwitch("use-mock-keychain"); + config.addCommandLineSwitch("single-process"); + config.addCommandLineSwitch("enable-gpu"); + config.addCommandLineSwitch("enable-gpu-rasterization"); + config.addCommandLineSwitch("enable-webgl"); + config.addCommandLineSwitch("enable-impl-side-painting"); + config.addCommandLineSwitch("disable-software-rasterizer"); + config.addCommandLineSwitch("multi-threaded-message-loop"); + // config.addCommandLineSwitch("disable-gpu"); // config.addCommandLineSwitch("enable-media-stream"); // config.addCommandLineSwitch("allow-file-access-from-files"); @@ -134,11 +88,8 @@ main(int argc, char* argv[]) // the lifecycle of cefContext must be the same as QApplication instance QCefContext cefContext(&a, argc, argv, &config); - // application window - CefWidget w; + MainWindow w; w.show(); - - // flying return a.exec(); }