最近在写无人机地面站程序,在WIN上面Qt导入百度地图Qwebengine啥的,问题倒是不大,用以前别人的就可以,但是最近做的内容需要用到Linux环境,所以只能把QT的内容移植过来。刚开始移植的时候我以为在Ubuntu安装完QT,就可以直接编译了,但是情况好像没有想象中的那么简单。之前我在WIN上用的是MSVC2017的编译器,但是到Ubuntu上就用不了了,刚好新的软件要从串口传输,改成TCP传输,索性从新开始写程序。。。(如果有哪位大哥懂得怎么移植qt程序的话,可以教教我,非常感谢,非常感谢)-------这个是一个开端。
其他部分相对来说都是比较顺利的,但是把之前HTML文件的地图放入QT的时候遇到了问题,之前我都是直接先放入一个QWidget然后在ui里面直接提升为QWebengine,但是我的ui里面就是没有这个选项,找了好多人的资料安装完各种库都不行,直到遇到大佬:ubuntu环境下在Qt上调用百度地图_ubuntu连接百度api_拿到金像奖上课那家店的博客-CSDN博客
很及时的解决了这个问题~!!!
具体操作是这样的:
在pro文件里加入代码:
QT+=webenginewidgets webengine webchannel
运行一下,看会不会报错,如果报错了就在就安装qtwebengine5相关的库
sudo apt install qtwebengine5-*
sudo apt install libqt5webengine5
(然后QT重新打开,再编译,如果还是不行的话,俺就不知道怎么办了,可以评论区互相指导一下)
接着在ui里面放入工具人--widget或者是frame
然后就只能用代码把qwebengine放进你的widget或者是frame里面了
在mainwindow.cpp里面记得
#include<QHBoxLayout>
#include<QWebEngineView>
#include<QStackedLayout>
然后
//---------------地图--------------地图---------------地图-------------------
QWebEngineView *webview=new QWebEngineView(this);
QStackedLayout* layout = new QStackedLayout(this);//搞个布局
ui->frame_map->setLayout(layout);//放到你ui的widget或者frame里
layout->addWidget(webview);//在布局里加入QWebEngineView
webview->load(QUrl("qrc:/resource/gaode.html"));
//放入你的地图文件,这里也可以用www.baidu.com类似的网址,不一定是地图
//下面就是交互内容了
m_webchannel = new QWebChannel();
m_webchannel->registerObject("mainwidget", this);
webview->page()->setWebChannel(m_webchannel);
//---------------地图--------------地图---------------地图-------------------
然后再运行一下,网页就会显示在你刚刚的ui放的框框里面啦!
------------------------------------------------------------------------------------------------------------------------------
也可以参考这个大佬:QWebEngine 初探 显示并跳转页面(QWebEngineView 二级页面 关闭程序时报错)_qtwebengine网页跳转报错_三头牛的博客-CSDN博客------------------------------------------------------------------------------------------------------------------------------
看到一个更牛的方法,直接把ui用文本打开,然后将你控件前面的
class="QWidget"
改成
class="QWebEngineView"
就可以直接
ui->map_try->load(QUrl("https:www.baidu.com"));
//map_try是你放入的Widget或frame控件
参考大佬:Ubuntu20.04下QT5.15.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口_天上星斗的博客-CSDN博客