qt5.9.0使用qwebengineview在平板上ubuntu系统加载百度地图,不能用触摸屏拖动怎么回事
时间: 2023-08-24 07:06:25 浏览: 242
可能是因为 Qt 5.9.0 的 QWebEngineView 组件没有默认启用触摸事件的支持,需要手动添加触摸事件的处理。您可以按照以下步骤进行尝试:
1. 在 .pro 文件中添加以下代码,启用触摸事件支持:
```
QT += widgets
QT += webenginewidgets
CONFIG += touch
```
2. 在代码中添加以下代码,处理触摸事件:
```cpp
// 在 QWidget 或 QWebEngineView 的派生类中添加以下代码
bool MyWidget::event(QEvent *event)
{
if (event->type() == QEvent::TouchBegin ||
event->type() == QEvent::TouchUpdate ||
event->type() == QEvent::TouchEnd) {
// 处理触摸事件
return true;
}
return QWidget::event(event);
}
```
3. 在处理触摸事件的代码中,可以通过 QTouchEvent::touchPoints() 函数获取触点信息,然后根据触点信息进行相应的操作,比如拖动地图。
希望以上步骤可以帮助您解决问题。
相关问题
qt5.9.0 qwebengineview加载地图无法触屏拖动怎么办
Qt 5.9.0 的 QWebEngineView 控件是基于 Chromium 内核的 Web 浏览器控件,其默认情况下不支持触摸屏拖动地图。如果您需要在 QWebEngineView 控件中加载地图并支持触屏拖动,可以考虑使用 JavaScript 和 HTML5 技术来实现。
具体实现方式如下:
1. 在 HTML5 中使用 Google Maps API 加载地图,并启用触摸屏拖动功能。
```html
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Google Maps JavaScript API v3 Example: Map Simple</title>
<style>
html, body, #map_canvas {
margin: 0;
padding: 0;
height: 100%;
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
var map;
function initialize() {
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(-34.397, 150.644),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map_canvas'),
mapOptions);
map.setOptions({draggable: true, zoomControl: true, scrollwheel: true, disableDoubleClickZoom: false});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map_canvas"></div>
</body>
</html>
```
2. 在 Qt 的代码中,使用 QWebChannel 将 JavaScript 对象暴露给 Qt 代码,并在 QWebEngineView 的 loadFinished 信号触发后,通过 QWebChannel 的 call 方法调用 JavaScript 对象的方法来启用触摸屏拖动功能。
```cpp
#include <QWebChannel>
#include <QWebEngineView>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWebEngineView view;
view.load(QUrl("file:///path/to/your/html/file"));
// Create a QWebChannel object and expose a QObject to JavaScript
QWebChannel channel;
QObject *obj = new QObject();
channel.registerObject("qtObj", obj);
view.page()->setWebChannel(&channel);
// When the page is loaded, call the JavaScript function to enable touch drag
QObject::connect(&view, &QWebEngineView::loadFinished, [&]() {
view.page()->runJavaScript("qtObj.enableTouchDrag();");
});
view.show();
return app.exec();
}
```
在 JavaScript 中,可以定义一个名为 qtObj 的对象,并在该对象中定义一个名为 enableTouchDrag 的方法来启用触摸屏拖动功能。
```javascript
var qtObj = {
enableTouchDrag: function() {
var mapDiv = document.getElementById("map_canvas");
mapDiv.addEventListener("touchstart", function(e) {
if (e.touches.length == 1) {
var touch = e.touches[0];
var mouseEvent = new MouseEvent("mousedown", {
clientX: touch.clientX,
clientY: touch.clientY
});
mapDiv.dispatchEvent(mouseEvent);
}
}, false);
mapDiv.addEventListener("touchmove", function(e) {
if (e.touches.length == 1) {
e.preventDefault();
var touch = e.touches[0];
var mouseEvent = new MouseEvent("mousemove", {
clientX: touch.clientX,
clientY: touch.clientY
});
mapDiv.dispatchEvent(mouseEvent);
}
}, false);
mapDiv.addEventListener("touchend", function(e) {
if (e.touches.length == 0) {
var mouseEvent = new MouseEvent("mouseup", {});
mapDiv.dispatchEvent(mouseEvent);
}
}, false);
}
};
```
这样就可以在 QWebEngineView 控件中加载地图并支持触屏拖动了。
Qt5.9.0 Qwebengineview加载地图,触屏无法拖动怎么办
如果您在使用Qt5.9.0中的QWebEngineView加载地图时,触摸无法拖动,请尝试以下方法:
1. 确认是否正确设置了viewport的大小:
```python
self.webEngineView.setViewportSize(self.webEngineView.size())
```
2. 尝试在加载地图之前设置以下属性:
```python
self.webEngineView.settings().setAttribute(QWebEngineSettings.TouchIconsEnabled, True)
self.webEngineView.settings().setAttribute(QWebEngineSettings.TouchEnabled, True)
```
3. 如果仍然无法拖动,请尝试将以下代码添加到你的QWebEngineView对象的mousePressEvent方法中:
```python
self.webEngineView.mousePressEvent = self.onMousePressEvent
def onMousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.dragPos = event.globalPos()
event.accept()
def onMouseMoveEvent(self, event):
if event.buttons() == QtCore.Qt.LeftButton:
self.move(self.pos() + event.globalPos() - self.dragPos)
self.dragPos = event.globalPos()
event.accept()
```
以上是一些可能解决触屏拖动地图的方法,您可以根据您的代码和环境进行调整和尝试。如果仍然无法解决问题,您可以尝试升级到Qt5.9.1或更高版本,因为Qt5.9.0版本存在一些已知的问题。
阅读全文