使用 QWebEngineView 之后标题栏按钮无法交互
zhiyiYo opened this issue · comments
问题描述
作者您好,我在无边框窗口中使用 QWebEngineView
时发现标题栏按钮无法正常交互,但是标题栏仍然可以拖动,请问这是已知的 bug 吗?
环境信息
- Windows 11 23H2
- Qt SDK: 6.5.2 MSVC
- FramelessHelper git 版本: c4a7bc8
截图
最小复现代码
#include <FramelessHelper/Widgets/FramelessWidgetsHelper>
#include <FramelessHelper/Widgets/StandardTitleBar>
#include <QApplication>
#include <QDesktopServices>
#include <QTimer>
#include <QVBoxLayout>
#include <QWebEngineView>
#include <framelessconfig_p.h>
FRAMELESSHELPER_USE_NAMESPACE
using namespace Global;
class Demo : public QWidget
{
Q_OBJECT
public:
Demo(QWidget* parent = nullptr)
: QWidget(parent),
titleBar(new StandardTitleBar(this)),
webView(new QWebEngineView(this)),
vBoxLayout(new QVBoxLayout(this))
{
FramelessWidgetsHelper::get(this)->extendsContentIntoTitleBar();
webView->load(QUrl("https://www.baidu.com"));
resize(1000, 750);
vBoxLayout->addWidget(titleBar);
vBoxLayout->addWidget(webView);
vBoxLayout->setContentsMargins(0, 0, 0, 0);
// set up title bar
FramelessWidgetsHelper* helper = FramelessWidgetsHelper::get(this);
helper->setTitleBarWidget(titleBar);
helper->setSystemButton(titleBar->minimizeButton(), SystemButtonType::Minimize);
helper->setSystemButton(titleBar->maximizeButton(), SystemButtonType::Maximize);
helper->setSystemButton(titleBar->closeButton(), SystemButtonType::Close);
titleBar->raise();
}
private:
StandardTitleBar* titleBar;
QWebEngineView* webView;
QVBoxLayout* vBoxLayout;
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
Demo w;
w.show();
return app.exec();
}
#include "main.moc"
最小复现工程
使用的是无边框窗口的静态链接库
TestFramelessWebEngine.zip
兄弟,试试这个。https://github.com/stdware/qwindowkit/tree/webview-test
打开mainwindow的example就行,临时搞了个分支,暂时只在windows上试了。
兄弟,试试这个。https://github.com/stdware/qwindowkit/tree/webview-test 打开mainwindow的example就行,临时搞了个分支,暂时只在windows上试了。
感谢,我看了一下仓库的代码,似乎和原本的无边框库差异挺大的
兄弟,试试这个。https://github.com/stdware/qwindowkit/tree/webview-test 打开mainwindow的example就行,临时搞了个分支,暂时只在windows上试了。
感谢,我看了一下仓库的代码,似乎和原本的无边框库差异挺大的
FramelessHelper不久后就会废弃了,大部分实现已经搬了过去,并做了优化,然后修复了已有的很多缺陷,麻烦您看看qwindowkit有没有出现你这个issue。文档暂时没写,只需要参考看看mainwindow的用法就行。
我用qt6试了,确实问题很大...
我找到问题的原因了,我这边qt6运行那段代码会导致直接崩溃。原因是因为把QWebEngineView设为central widget的时候会使窗口句柄发生变化,Qt6和Qt5的实现貌似不一样。给我点时间去把它解决了。
目前 FramelessHelper 对用户代码的侵入性几乎为 0 了,如果新的库也能做到这一点就好了
目前 FramelessHelper 对用户代码的侵入性几乎为 0 了,如果新的库也能做到这一点就好了
没有明白侵入性是啥。新的库跟FramelessHelper的接口基本是一致的,我感觉迁移挺方便的吧?
添加了对WinIdChange的监视,我这边用Qt 6.5.1编译,使用WebEngineView作为central widget没发现问题。麻烦您有空的时候试一试。还是https://github.com/stdware/qwindowkit/tree/webview-test的mainwindow example。
目前 FramelessHelper 对用户代码的侵入性几乎为 0 了,如果新的库也能做到这一点就好了
请问你是想让qwk做出哪些具体的修改呢?
不好意思刚看到,晚上我试试
@SineStriker 测试了一下没有问题
@SineStriker 话说
-DQWindowKit_DIR=/path/install/cmake/QWindowKit
参数有起作用吗,貌似没在 cmake 里面看到这个配置项
这是给你要引入QWindowKit的项目用的,给find_package
搜索库用的...直接构建QWindowKit不需要。另外那个侵入性的问题,方便把建议或者需求说详细一些吗?
这是给你要引入QWindowKit的项目用的,给find_package搜索库用的
学废了,之前都是手动打的包
外那个侵入性的问题,方便把建议或者需求说详细一些吗?
昨天粗略看了一下 mainwindow.cpp,发现里面代码量挺大的,今天又看了一下才知道大多数都是构建标题栏用的代码。如果能给个最小示例的话可能会比较适合快速上手
外那个侵入性的问题,方便把建议或者需求说详细一些吗?
昨天粗略看了一下 mainwindow.cpp,发现里面代码量挺大的,今天又看了一下才知道大多数都是构建标题栏用的代码。如果能给个最小示例的话可能会比较适合快速上手
emm...对的,FramelessHelper里面代码比较冗余,我们商量了一下把除了核心功能以外的东西全去了,所以需要用户自己构建标题栏。这个会详细在文档里介绍的,现在main分支的README其实就写了点文档,之后还会补充。
支持,经常不知道要 include 哪一个头文件