qt中新增html,Qt和HTML笔记:初始化
为了应对最近的比赛,但对很对 GUI 系统都不怎么熟悉,而且又要用 C++ 进行项目核心代码的编辑。RetVal 希望团队做出一个很炫的图形界面,不过,对 C++ 的窗口系统还真的不熟悉。于是尝试用 Qt 和 HTML 5 来进行界面的编程,也算是一个新挑战。
不过似乎关于 Qt 和 HTML 5 的中文资料还不多,于是整理一下笔记吧。这个博客也很久没更新了……
新建项目
要新建 Qt HTML 5 应用程序,可以直接在 Qt Creator 里新建“HTML 5 Application”,但要注意的是,这样新建的Qt程序并没有包含菜单栏之类控件,完全是一个 Qt 窗口里面有一个 Webkit 组件。但有一个好处是,新建的 Webkit 组件被 Qt Creator 对移动设备(主要是触摸屏设备)优化过,可以应用于桌面端和手机端。但也由于针对了触摸屏,所以,默认禁用了“hover”事件(即鼠标悬停事件)。使我还纠结了很久为什么 Qt Webkit 不支持鼠标悬停事件。
如果我们是针对桌面端开发,那么其实不必要考虑Webkit的移动支持,因此,我们可以自己新建一个 Qt GUI 项目。此时,要注意的是在 .pro 文件中添加对 Webkit 的编译支持。
参考 .pro 文件如下:
#-------------------------------------------------
#
# Project created by QtCreator 2012-04-02T09:29:02
#
#-------------------------------------------------
QT += core gui webkit
TARGET = ColdTest
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
sampleobject.cpp
HEADERS += mainwindow.h \
sampleobject.h
FORMS += mainwindow.ui
uiml.source = html
uiml.target = .
DEPLOYMENTFOLDERS = uiml
defineTest(qtcAddDeployment) {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemsources = $${item}.sources
$$itemsources = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath= $$eval($${deploymentfolder}.target)
export($$itemsources)
export($$itempath)
DEPLOYMENT += $$item
}
MAINPROFILEPWD = $$PWD
win32 {
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, /, \\)
sourcePathSegments = $$split(source, \\)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)
target = $$replace(target, /, \\)
!isEqual(source,$$target) {
!isEmpty(copyCommand):copyCommand += &&
isEqual(QMAKE_DIR_SEP, \\) {
copyCommand += $(COPY_DIR) \"$$source\" \"$$target\"
} else {
source = $$replace(source, \\\\, /)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
target = $$replace(target, \\\\, /)
copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\"
}
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
} else:unix {
desktopfile.path = /usr/share/applications
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, \\\\, /)
macx {
target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
} else {
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
}
target = $$replace(target, \\\\, /)
sourcePathSegments = $$split(source, /)
targetFullPath = $$target/$$last(sourcePathSegments)
!isEqual(source,$$targetFullPath) {
!isEmpty(copyCommand):copyCommand += &&
copyCommand += $(MKDIR) \"$$target\"
copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\"
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
installPrefix = /opt/$${TARGET}
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
icon.files = $${TARGET}.png
icon.path = /usr/share/icons/hicolor/64x64/apps
desktopfile.files = $${TARGET}.desktop
target.path = $${installPrefix}/bin
export(icon.files)
export(icon.path)
export(desktopfile.files)
export(desktopfile.path)
export(target.path)
INSTALLS += desktopfile icon target
}
export (ICON)
export (INSTALLS)
export (DEPLOYMENT)
export (TARGET.EPOCHEAPSIZE)
export (TARGET.CAPABILITY)
export (LIBS)
export (QMAKE_EXTRA_TARGETS)
}
qtcAddDeployment()
项目依赖部分(qtcAddDeployment)是参考了 Qt Creator 为 HTML 5 Application 项目自动生成的代码。
然后,在项目根目录下新建文件夹 html ,把用到的 HTML 5 构建的文件添加到这里。
初始化 QtWebkit
新建 Qt GUI 项目后,默认应该会生成 MainWindow 类,简单起见,直接以 MainWindow 类为基础,用 Qt Desginer 画好界面。
然后回到 MainWindow 类(或者你自己新建的其他类)的初始化函数中,添加slot:
private slots:
void addToJavaScript();
然后,方法实现为:
void MainWindow::addToJavaScript()
{
ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("Qt", qt);
ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("app", this);
}
这个函数是为 Webkit 组件建立页面的时候,把 C++ 对象包装为 JavaScript对象传递给 JavaScript 调用的。这里,即是把 qt(一个QApplication 对象)、app(QMainWindow 对象)添加到 QtWebkit 的 JavaScript 运行环境中。
然后,添加本地路径调整函数:(这里省略头文件的声明了)
QString MainWindow::adjustPath(const QString &path)
{
#ifdef Q_OS_UNIX
#ifdef Q_OS_MAC
if (!QDir::isAbsolutePath(path))
return QCoreApplication::applicationDirPath()
+ QLatin1String("/../Resources/") + path;
#else
const QString pathInInstallDir = QCoreApplication::applicationDirPath()
+ QLatin1String("/../") + path;
if (pathInInstallDir.contains(QLatin1String("opt"))
&& pathInInstallDir.contains(QLatin1String("bin"))
&& QFileInfo(pathInInstallDir).exists()) {
return pathInInstallDir;
}
#endif
#endif
return path;
}
这段代码也是参考 HTML 5 Application 生成的函数,可以把相对项目路径转化为 QUrl 标识。
于是,初始化 WebView 的时候就可以:
ui->webView->setUrl(QUrl(MainWindow::adjustPath("html/ui.html")));
来调用 html 文件夹下面的 ui.html 文件了。
到这里,一个 Qt HTML 5 程序的初始化工作就完成了。可以编辑一下 ui.html 文件试用一下 Qt Webkit ~
qt中新增html,Qt和HTML笔记:初始化相关推荐
- Qt中moc问题(qt moc 处理 cpp)
Qt编译常见的错误: 编译报错: 1>Linking... 1>cmmwindow.obj : error LNK2001: unresolved external symbol &quo ...
- qt linux excel文件读取显示,qt中写入excle?QT怎样读写excel-CSDN论坛
如何通过Qt 创建一个excel文件 首先,我们打开前文所的工目. 然后,我们在界面设计,加入一个label用于显示,要保存的目录.注意设置下相应的界面布局. 然后,我们在mainwindow.h类中 ...
- 【Qt】Qt中JSON简介
00. 目录 文章目录 00. 目录 01. JSON简介 02. JSON Support in Qt 03. JSON类 04. 附录 01. JSON简介 1.1 JSON概述 JSON(Jav ...
- 压缩包安装mySQL 与 Qt中使用mySQL
文章目录 安装mySQL mySQL压缩包安装 Qt中使用mySQL Qt中的mySQL驱动编译 test 安装mySQL mySQL压缩包安装 参考: https://blog.csdn.net/S ...
- QT中OpenGL开发起步
OpenGL中环境搭建 近期由于需要做一个GUI展示的OpenGL程序,因此想到用QT来做界面,需要在QT中写OpenGL,配完环境后,在这里总计一下. QT基础 总体看来,QT的版本较为混乱,有时候 ...
- TX2(Linux)在Qt中调用python函数
实验环境:TX2使用JetPack-L4T-3.3-linux-x64_b39进行环境安装 详情参考:Jetpack3.3刷机 安装的python版本为3.5.2 1.创建Qt工程 在Qt中创建一个Q ...
- Kinect+OpenNI学习笔记之6(获取人体骨架并在Qt中显示)
前言 MS的kinec SDK和OpenNI都提供了人体骨骼跟踪的算法,人体骨骼跟踪算法在kinect人体行为识别中非常重要,该识别过程通常被用来作为行为识别的第一步, 比如说,通过定位人体中的骨骼支 ...
- Qt登录服务器验证,QT笔记:QT模拟网页交互过程中的token验证机制
在平时上网时,我们登陆一些网站后,为了校验客户端的身份.保障数据的安全性,服务器会给浏览器发送一个token值,这个token值就是一张令牌,你可以把它看成一张通行证,有了它你才能对该网站进行提交数据 ...
- QT中IDirect3DDevice9的Present方法失败情况的处理笔记
这几天在试着使用QT做编辑器,然后打算使用Irrlicht作为渲染引擎.结果在集成的时候遇到了问题. 使用了Irrlicht论坛里面有人提供的QIrrlichtWidget,结果什么都画不出来.仔细跟 ...
最新文章
- Centos7 安装 nginx 服务器的两种方式
- XML-RPC远程方法调用
- windows使用nginx实现网站负载均衡测试实例
- linux vim verilog,vim下好用的verilog插件:)( 更新) - [IC]
- 计算机课件知识,计算机基础知识1认识计算机课件.ppt
- B 站疯传!P8技术大佬分享了20个免费Java课程,白拿不谢!!
- Beacon Mountain 测试版 – 常见问题解答
- AI入门,从每个人都应该学的AI第一课开始
- 嵌入式Linux上没有x-window系统环境运行qt程序的方法
- 生成特定区间的随机数
- 提取SHP格式文件折点(拐点)地理坐标(经纬度)
- android源码在线
- .net 开源混淆器 ConfuserEx
- Python爬虫自己写项目之:爬取火车站的时刻表和票务信息
- win10u盘被写保护怎么解除_Win10系统下U盘写保护应该如何破除!
- 泛函分析 04.01 有界线性算子 - 有界线性算子与有界线性泛函
- 计算机文件右击怎么显示打开方式,怎么删除Win10文件右键菜单打开方式中已卸载程序选项?...
- python修改系统时间_python修改操作系统时间的方法
- snapchat_如何截屏和共享Snapchat快照
- 从零学习Belief Propagation算法(三)
热门文章
- python把.CSV文件转换成.JSON格式文件并格式化储存
- C++音乐播放器:MCI库的使用
- Java数据结构:图
- SQL Extractor 数据库修复取证大师软件功能介绍
- html5中给视频添加字幕
- 【ESP32_8266_WiFi (二)】接入点模式、无线终端模式
- Kubenetes1.13.1集群部署 --01基于Kubeadm搭建Kubernetes
- echarts 点击地图画布空白处 触发事件
- gp-greenplum-vacuum-资源回收-AO表空间回收
- input文本框输入与输出(简单举例)