
Qt for Android以下简称QfA
1 跨平台只在pc上有优势,在移动设备上毫无优势。移动设备整体的应用风格需要保持一致,你外部加进来一个ui,倒是和平台保持一致了。你如何保持和原生ui的这种使用一致性。
2在开发易用度上,Android(java) api 已经做得很好,包括事件,广播,服务等Qt里有的基本上Android api里已经做得很好,从Qt开发者转为java开发者也很容易。 而如果要写QfA应用,开发者不仅要懂Qt,同样也避免不了要写java代码。
3 如果要写和其它app通信的时候,QfA的灾难性就来了。如果是上层的几乎等完整的搞一遍Android api吧。 另外对于和设备相关的一些调用(GPS/Telephony)等,QfA的工作量一下子就上来了,这时候你还指望qml么?
4性能呢? QfA对于图形渲染区的请求还得在java的接口请求,是不是又要绕了个大弯。
5 软件体积。 终端用户要用Qt app,势必要先装一个Qt lib, 或者在你的app 中一起静态发布。
在有很多优秀的QfA app出现之前,大家不带乐意只为一个好的app 去装一个大的软件,而会愿意选择一个原生软件替代。
6官方支持。目前Qt开发团队多少人?但目前他们要支持多少平台。 如果没有一个比较大的商业级别软件在用QfA,官方能做的就是让这个软件在Android平台能编译,运行,解决一些明显的bug。
7 Qt做mobile最好的机会就是被大款看上。望采纳,谢谢。
Googlecn上介绍NDK的说明如下;
原生开发工具包 (NDK) 是一组可让您在 Android 应用中利用 C 和 C++ 代码的工具。 可用以从您自己的源代码构建,或者利用现有的预构建库。
NDK 不适用于大多数初学的 Android 编程者,对许多类型的 Android 应用没什么价值。 因为它不可避免地会增加开发过程的复杂性,所以通常不值得使用。 但如果您需要执行以下 *** 作,它可能很有用:
从设备获取卓越性能以用于计算密集型应用,例如游戏或物理模拟。
重复使用您自己或其他开发者的 C 或 C++ 库。
照这样说,你不用c/c++就不需要,但是你用qt那肯定是用c++来开发
qt 可以通过QGLWidget运行opengl。QGLWidget继承QWidget,能够直接在里面调用opengl的接口。这个在qt文档里有具体说明,也有相关例子,所以不赘述了。但是无法在正式软件里面执行,为什么?因为正式软件是用QGraphicsScene这个场景类 *** 作和 *** 作一切item,而用QGraphicsView将其显示出来,而每一个item都是QGraphicsItem的子类。QGLWidget并不是QGraphicsItem类,我曾经尝试用普通的QWidget类那样,通过proxy来加进QGraphicsItem,但是没有成功。或许有方法,但是没有找到。
于是我放弃了用QGLWidget来 *** 作opengl的打算,寻找直接在QGraphicsItem中 *** 作opengl的方法。通过查看文档和示例代码,找到了这个方法:
1 往qt工程文件里添加opengl以及对应的lib。
2 对QGraphicsView进行一个三维对话框的指定,代码如下:
QGLWidget widget = new QGLWidget(QGLFormat(QGL::SampleBuffers));
widget->makeCurrent();
QGraphicsView view;
viewsetViewport(widget);
上述代码告诉了 QGraphicsView 类当前绘制的对象是支持opengl的。于是所有的场景中的item都将绘制到widget 上。
3 写一个QGraphicsItem的继承类,特别要重写paint函数。代码如下:
void XXX::paint(QPainter painter, const QStyleOptionGraphicsItem option, QWidget widget)
{
painter->beginNativePainting();
glColor3f(05,10,02);
glBegin(GL_TRIANGLES);
glVertex3f(1000,1000,-1000);
glVertex3f(1500, 1000, -1000);
glVertex3f(1000, 1500, -1000);
glEnd();
painter->endNativePainting();
}
上面这个函数主要是用opengl接口绘制了一个三角形。记住,在opengl绘制之前一定要执行painter->beginNativePainting()以及painter->endNativePainting()这两个语句。
QGraphicsScene、 QGraphicsView和QGraphicsItem的关系可以查阅相关文档,也不赘述了。
不过我按照这个方式画的三角形,怎么也在窗口上显示不出来,找了半天才发现问题在这个函数上QGraphicsItem::boundingRect()。这个函数是 干什么用的呢?主要用来返回该item的初始化大小,这个大小不会轻易改变,后续的改变都可以通过矩阵来完成,但是初始大小是不变的。QGraphicsView通过这个矩形来判断当前item是不是需要重绘,如果在重绘区外,则不调用重绘函数了。同时碰撞检测之类,也可以用这个矩形来判断。原来,item本身的矩阵外包框不对,所以才导致了重回不出来,改过来就正确了。
上面说的很潦草,具体怎么改的步骤就不说了。要想正确的绘制,必须得弄清楚坐标系的关系,QGraphicsScene、QGraphicsView以及QGraphicsItem这三个坐标系到底是什么关系。我看了文档,也自己进行了测试,但是感觉文档和测试的结果有些出入。具体出入不说了。说一下自己得心的吧。
先说明:涉及到一切大小和长度,都是像素大小,至少我测试的结果是这样的。
在建立QGraphicsScene对象的时候,有一个构造函数是矩形,这个矩形是什么含义呢?经过测试,发现这个矩形并没有指定d出窗口的位置,比如,我把矩形的左上角点指定为-1000,-1000,显示的位置和1000,1000是一样的,而长度则正确指定了(当然,可能会有滚动条)。所以,这个矩形的左上角点并不是显示的窗口的位置,而是它在逻辑上的左上角点。我们显示一切item,都是以这个逻辑上的坐标系为准来绘制的。比如,左上角点是-1000,-1000,而item的位置在-500,-500,则这个-500,-500相当于在显示窗口的左上角往下各加500个像素的坐标的位置。
那么 QGraphicsItem的boundingRect是什么意思呢?返回的是什么大小?是以什么坐标系显示的大小?首先,这个大小肯定是以像素为单位的,其次,这个矩形的坐标是以QGraphicsScene的逻辑坐标为准的。当然这个大小是没有任何矩阵叠加的大小。有了矩阵叠加后,实际的矩形可能会发生变化。假如在boundingRect中指定矩形的左上角为100,100,那么最终体现的位置则是QGraphicsScene逻辑坐标100,100的位置,如果QGraphicsScene的左上角点已经指定为-1000,-1000,那么这个位置实际上就是离窗口左上角点1100,1100的位置(由于有滚动条,所以也不一定是这个长度。)
那么在QGraphicsItem的paint函数中进行了opengl绘制用的是什么坐标呢?其实用的也是QGraphicsScene的逻辑坐标。如上面的例子,绘制的直角三角形直角顶点是0,0,那么显示的位置就是距离显示窗口左上角点1000,1000的位置。不过opengl的所有绘制都是没有矩阵叠加的基础上,如果用矩阵叠加,则显示的位置肯定和指定的有区别了。比如,我用setPos强制指定一个位置,这个位置将和opengl绘图坐标相叠加,最后显示到窗口上。我推测setPos其实是改变了矩阵,是一个平移矩阵。
IDE真正的用武之地,是在某种特定的生态环境下,开发边界清晰的项目。比如在windows上用VS开发MFC应用,比如用QtCreator开发qt应用,比如用AndroidStudio开发安卓app,比如用Xcode开发ios应用。基本上运行平台、IDE、语言等等都是一整套。
这种类型的项目,我认为,再大都不算大。
真正的大项目,是涉及了多种语言,多个运行平台,层次纵深很大的项目。比如说在一棵代码树里面有c语言编写的硬件固件,有c++编写的视频处理,有python编写的dnn目标检测,有Java写的人机交互,有bash脚本,还依赖一些第三方库。有的底层软件用makefile管理,有的用cmake管理,有的用maven管理。他们相互之间还有版本依赖。这时候做些调试的时候,免不了要在不同的语言不同的编译脚本之间跳来跳去。过程中可能还需要把一些东西推到服务器上,再登上去做一些配置。还有可能要登陆到嵌入式设备上。有的时候还要打开一个串口终端。
这么复杂的事情,没有任何一个IDE做得好。因为项目一旦复杂到这种程度,就没有任何通用性可言。每个具体的项目都是完全不同的。不可能设计一套ide来处理好所有的项目。
而这种情况对于只有一个简单的前端(文本编辑器或者LISP解析器),后端配上大量的插件,组合而成的个人定制化工具集,是可以胜任的。
用c语言编的应用程序能在安卓手机上运行吗
C语言编写的程序不能直接在android上运行,androidjni通过类似dll的so方式应用C/C++代码,就是androidnative的开发(NDK)
VB生成的应用程序能在手机上运行吗不能的。
windows的自动运行跟Mac的自动运行肯定不是一个道理,那张光盘只不过兼顾了两个系统的自动运行方式专门做了设置。而且,这个跟问题没有什么关系。
Windows下VB编译好的程序绝对不可能直接运行在mac os下。
windows 应用程序能在 windows 10 mobile上运行吗普通桌面应用就是指我们传统的WINDOWS应用程序 应用商店下载的为Metro应用程序,一般可以全屏 *** 作的。 一般办公电脑习惯是用传统的普通桌面应用 平板、手机等是使用应用商店下载的应用程序 可以这样理解的
请问,用C#编的exe的应用程序能够在所有Windows系统上运行吗?目标机器上必须安装相应版本的 framework runtime,其实和JAVA虚拟机一样,C#编译的exe最终都被编译成中间语言,需要在相应的运行时框架下才能运行
c语言怎么关闭正在运行的应用程序可以通过system 函数,调用dos命令taskkill实现关闭正在运行的应用程序。
如
system("taskkill /im notepadexe");
会关闭记事本应用。
system("taskkill \F /pid 1234 \T");
会强制结束pid为1234的进程及其子进程。
关于taskkill的详细描述如下:
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]
参数列表:
/S system 指定要连接到的远程系统。
/U [domain\]user 指定应该在哪个用户上下文
执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示输入。
/F 指定要强行终止的进程。
/FI filter 指定筛选进或筛选出查询的的任务。
/PID process id 指定要终止的进程的PID。
/IM image name 指定要终止的进程的图像名。通配符 ''可用来指定所有图像名。
/T Tree kill: 终止指定的进程和任何由此启动的子进程。
/ 显示帮助/用法。
筛选器:
筛选器名 有效运算符 有效值
----------- --------------- --------------
STATUS eq, ne 运行 | 没有响应
IMAGENAME eq, ne 图像名
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 时,
mm - 钟,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用,单位为 KB
USERNAME eq, ne 用户名,格式为
[domain\]user
MODULES eq, ne DLL 名
SERVICES eq, ne 服务名
WINDOWTITLE eq, ne 窗口标题
注意: 只有带有筛选器的情况下,才能跟 /IM 切换使用通配符 ''。
注意: 远程进程总是要强行终止,
不管是否指定了 /F 选项。
用java编写的程序能在安卓机上运行么
当然可以,不过如果涉及到线程的时候,得按照安卓对应的版本来进行选择性的移植程序
假如你使用了开发框架的话,那么在安卓上面可能会遇到一些小问题!调试一下应该就可以通过的
我想学编写安卓手机的应用程序,请问我需要学哪些语言?c?java?安卓是以JAVA语言为基础的啊。当然是看java了!好多安卓程序员原来都是学JAVA的,然后安卓被谷歌开发以后才转过来的!
如何让MFC编写的应用程序能在别的电脑上运行把应用程序做成Release版的应用程序,具体步骤如下:
菜单Build->SetActiveConfigure,在d出对话框中选择Win32Release,点OK,然后
菜单project->setting ,在d出对话框的General属性页的Microsoft Foundation classes
下拉列表中选择User MFC in static Library,然后rebuildall,把生成的Release目录下
的可执行文件拷贝到另一台机器上即可
静态编译 release编译 用dependexe看看依赖那些dll文件一并copy过去
在安卓系统上运行应用程序此需打开另一个应用程序这时正在运行的应用程序为什么会意外崩溃?系统的兼容性 与游戏不太符合 又或许是运行内存太小了 运行内存是512 还是1G或2G 记住是RAM不是ROM哦
以上就是关于有用QT开发安卓应用的吗全部的内容,包括:有用QT开发安卓应用的吗、使用QT编写安卓手机程序,需要调用NDK吗、qt android 怎样使用opengl等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)