分类 Qt GUI 下的文章

1、问题现象

     用最简单的QWebEngineView显示高德地图,出现如下错误,同时不能正确显示地图:

 js: Uncaught ReferenceError: AMap is not defined





2、解决方法

    直接修改Qurl从html文件改为直接用网络地址:

修改前:

     webview->load(QUrl("qrc:/map.html"));

修改后:

   webview->load(QUrl("https://www.baidu.com"));

因为QWebEngineView就相当于一个简单浏览器内核,可以直接显示网页,但修改成www.baidu.com后,依然不能显示网页,结果如下:



因此问题出在Qt的网络,而不是地图提供的html文件。

直接在webview->load之前执行如下语句,问题解决:

QNetworkProxyFactory::setUseSystemConfiguration(false);


3、正确显示网页





4、正确显示地图



1、问题现象

    如果编写Qt界面程序时,又调用了OpenCV的窗口显示函数:cv::namedWindow(),则Qt的界面程序无法显示,并打印出如下信息:


(qt_cleaning_evaluator:84563): GLib-GObject-WARNING **: 16:34:30.254: cannot register existing type 'GtkWidget'

(qt_cleaning_evaluator:84563): GLib-GObject-CRITICAL **: 16:34:30.254: g_type_add_interface_static: assertion 'G_TYPE_IS_INSTANTIATABLE (instance_type)' failed

(qt_cleaning_evaluator:84563): GLib-GObject-WARNING **: 16:34:30.254: cannot register existing type 'GtkBuildable'

(qt_cleaning_evaluator:84563): GLib-GObject-CRITICAL **: 16:34:30.254: g_type_interface_add_prerequisite: assertion 'G_TYPE_IS_INTERFACE (interface_type)' failed

(qt_cleaning_evaluator:84563): GLib-CRITICAL **: 16:34:30.254: g_once_init_leave: assertion 'result != 0' failed

(qt_cleaning_evaluator:84563): GLib-GObject-CRITICAL **: 16:34:30.254: g_type_add_interface_static: assertion 'G_TYPE_IS_INSTANTIATABLE (instance_type)' failed

(qt_cleaning_evaluator:84563): GLib-GObject-CRITICAL **: 16:34:30.254: g_type_register_static: assertion 'parent_type > 0' failed



2、解决办法

   去掉OpenCV的窗口显示函数相关的代码:cv::namedWindow()、cv::imshow()


    

用QT Designer设计界面程序时,可以直接导入图片资源,导入后,直接选择控件(比如按钮),然后更新皮肤,选择对应的图片即可。

000.png


111.png


33.png




44.png



55.png



66.png


















































用cmake(不是qmake)编译QT5,出现如下错误:undefined reference to `vtable for GraphicsView'

1:首先检查CMakeLists.txt中是否开启了QT的预处理:

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON)

set(CMAKE_AUTOUIC ON)

set(QT_USE_QTMAIN TRUE)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_POSITION_INDEPENDENT_CODE ON)



2: 如果上面的都添加了,则很有可能是没有把头文件也添加到源文件:

出错情况:

set(SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/mainwindow.cpp 

${CMAKE_CURRENT_SOURCE_DIR}/src/GraphicsView.cpp 

${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp )


添加头文件后,错误被修正:

set(SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/GraphicsView.h 

${CMAKE_CURRENT_SOURCE_DIR}/include/mainwindow.h 

${CMAKE_CURRENT_SOURCE_DIR}/src/mainwindow.cpp 

${CMAKE_CURRENT_SOURCE_DIR}/src/GraphicsView.

cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp )


因为这些头文件中包含了Q_OBJECT、Q_SLOTS等 QT关键字,因此也需要添加到add_executable中。

add_executable(lidar_calibration_viewer ${SRC_FILES})