
正文
关于qtandroid的信息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Qt的前景如何?Qt for Android 好吗
谈谈个人的看法吧:1、Qt主要强大在他能跨平台,及一套代码可以在很多平台上编译运行。2、Qt目前用于嵌入式系统比较普遍,PC端的应用程序现在也逐渐多起来了,值得高兴。3、如果想开发andriod应用的话,用QtQuick还是不错的,但是也有一些弊端就是调用andrido系统的一些api稍微麻烦点,需要通过java代码转换,这点在执行效率什么的都比不上原生的android应用开发。4、因此根据个人情况来定,如果纯属学习,个人感觉Qt还是不错的。以后的发展会慢慢变好!
相关问答
Q1: QT和Android有什么联系吗
QT是跨平台的c++编程平台。
你要是准备做android的手机开发有专门的android的sdk,是基于java的!
Q2: qtforandroid收费么
qtforandroid不收费。根据查询相关信息显示qtforandroid是用于在Android上进行开发的Qt,Qt是不需要支付任何费用的,意味着唯一现存的由Qt开发的用以提供移动电话应用的路线平台。
Q3: qt android 怎样使用opengl
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;
view.setViewport(widget);
上述代码告诉了 QGraphicsView 类当前绘制的对象是支持opengl的。于是所有的场景中的item都将绘制到widget 上。
3 写一个QGraphicsItem的继承类,特别要重写paint函数。代码如下:
void XXX::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter-beginNativePainting();
glColor3f(0.5,1.0,0.2);
glBegin(GL_TRIANGLES);
glVertex3f(100.0,100.0,-100.0);
glVertex3f(150.0, 100.0, -100.0);
glVertex3f(100.0, 150.0, -100.0);
glEnd();
painter-endNativePainting();
}
上面这个函数主要是用opengl接口绘制了一个三角形。记住,在opengl绘制之前一定要执行painter-beginNativePainting()以及painter-endNativePainting()这两个语句。
QGraphicsScene、 QGraphicsView和QGraphicsItem的关系可以查阅相关文档,也不赘述了。
不过我按照这个方式画的三角形,怎么也在窗口上显示不出来,找了半天才发现问题在这个函数上QGraphicsItem::boundingRect()。这个函数是 干什么用的呢?主要用来返回该item的初始化大小,这个大小不会轻易改变,后续的改变都可以通过矩阵来完成,但是初始大小是不变的。QGraphicsView通过这个矩形来判断当前item是不是需要重绘,如果在重绘区外,则不调用重绘函数了。同时碰撞检测之类,也可以用这个矩形来判断。原来,item本身的矩阵外包框不对,所以才导致了重回不出来,改过来就正确了。
上面说的很潦草,具体怎么改的步骤就不说了。要想正确的绘制,必须得弄清楚坐标系的关系,QGraphicsScene、QGraphicsView以及QGraphicsItem这三个坐标系到底是什么关系。我看了文档,也自己进行了测试,但是感觉文档和测试的结果有些出入。具体出入不说了。说一下自己得心的吧。
先说明:涉及到一切大小和长度,都是像素大小,至少我测试的结果是这样的。
在建立QGraphicsScene对象的时候,有一个构造函数是矩形,这个矩形是什么含义呢?经过测试,发现这个矩形并没有指定弹出窗口的位置,比如,我把矩形的左上角点指定为-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其实是改变了矩阵,是一个平移矩阵。
Q4: 如何用Qt写Android应用
设置qt-android开发环境
第一步:创建一个Android项目
我以Empty Qt
Project为例.点击Choose后出现一个对话框要求填写Project的名字和选择路径,输入完成后点击Next,到下面一个比较重要的操作:选择Qt
Version
注意,默认是选择Destkop的,正确应该按上图设置.设置后按Next确认一下,没有错就按Finish完成Qt-Android项目的建立.只要正确建立了Qt项目,就完成了一大半了.下图是完成后的一个截图:
第二步:编写程序
在这步大家按照平常Qt
Creator的步骤写程序就好.但是注意的是,有些模块暂时还没有移植,例如Qt网络模块,所以不能有网络相关的应用(不过我想这迟早会移植的).
作为例子,我就用hello
world吧:#includeQApplication#includeQLabelintmain(intargc,
char**argv){QApplicationapp(argc,
argv);QLabel*label=newQLabel("palign=centerHello,
World!/p");label-show();returnapp.
exec();}第三步:设置编译选项
Projects标签
- Run 展开Package configurations,选择Android target
SDK,(android7为例)
展开紧跟下面的Deploy configurations,选择Deploy local qt
libs
然后按左边倒数第三个绿色三角按钮运行:
第四步:手机上运行
你写的应用会打包成apk放在你项目文件夹里的/android/bin里面.把它拷到手机上安装.但是这样手机还不能运行这个程序,毕竟Android系统没有Qt的库.这个时候你就需要Ministro,一个为Android系统Qt程序运行下载所需要的库.可以到电子市场搜索Ministro,或者到Ministro项目里下载:Ministro
.安装好Ministro后再运行Qt程序,根据提示下载需要的库.
Q5: 请资深业内人士分析下 Qt 的前景?Qt for Android 好吗
Qt作为一个C++的框架在界面方面有它自己的优势,在嵌入式平台及桌面均有着不错的表现。作为android之外的一个可选择的框架,Qt不会就此消失,但Qt for android这样的方式一定不会有光明的未来。
理由:一,android本身的图形系统已经很完善,加上java类库的支持,Qt完全没有在android上存在的价值;
二,作为移动平台来说,android的框架显然更适合移动互联网,更能满足用户需求;
三,基于android的应用数量已经非常丰富,Qt在这方面的差距无法弥补;
四,android的开发群体数量质量(相比Qt开发者有很大一部分做PC桌面应用)更大更适于移动平台。

![[JSOI2008]球形空间产生器 [JSOI2008]球形空间产生器](https://www.04ip.com/template/qe/style/noimg/4.jpg)




