一直做的是windows开发,有2个小项目想做到手机。
看来看去,选择了QT。
本文介绍自己的学习的一些心得,希望对你有帮助。
1.选择QT
2.安卓的一些事
3.QML调用C++
4.资源集成(比较有用,网上资源比较少)
5.建议看看c++
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
1.选择QT
编程玩了很多年,不太喜欢那种coding(直接用代码做界面),Linux基本上是我的禁区。。。
从编程的角度来讲,个人认为微软的C++类似这种编写界面的方式很不习惯。
从学习的角度,比较推荐Delphi,VB这些。
QT,下载后直接上手,看了几个DEMO,大概用三天时间把第一个项目做好了(非常简单的东西)
电脑,手机直接运行。
可能今后会有很长时间要在QT上玩了。
感觉,QT还有待优化;不同平台一套源代码,加之免费,确实很吸引人;但是不同平台界面确实相差太大。
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
2.安卓的一些事:发布命名空间、图标、翻译、签名
要写的实在太多,简单写写
2.1如图中,三个操作点,重点第三个
window.open('http://www.qtcn.org/bbs/attachment/Mon_1409/50_154834_bd930e7f3891daa.png?52');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" > 
2.2AndroidManifest.xml文件的一些设置:包名,图标,权限

//-----------------------------------------------------------------------------------------------------------------------------------------------------------
3.QML调用C++:类必须用QObject、加入到QML中

加入到QML中,有两种方式:
1.直接用命令:
engine.rootContext()->setContextProperty ("actService", new ActService);
其中:engine,系统默认会自动生成;new ActService,自己建立的类;actService可以在后面的QML直接引用。
PS:这么写系统还是会报错,需要手动加入#include <QtQml>才可以编辑。
2.注册新QML组件的方式:
qmlRegisterType<ActService>("com.reeray.test.actservice",1,0,"ActService");
QML中,通过
import com.reeray.test.actservice 1.0
然后ActService就可以像其他的标准QML一样用了。非常COOL。
PS:这里,我建议采用第二种方式,便于编写一些扩展,以及同其他的组件交互。
    ActService{
        id:actService
        onNfStart:{
          //---自定义命令调用,用于同其他组件互动。。。也算是一个回调
        }
    }
Button{
   onClick:{
        actService.notify("你好呀!")//调用c++,不管actService是用上述哪种方法,都可以哦
    }
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
4.资源集成:写本文的主要内容吧,网上的介绍实在太少
4.1 背景,此部分内容不一定正确,但是可行。***水平有限,勿喷!***
前文,将按照定义com.reeray.test.act,项目名字为AssetsCopyTest
那么app自动装到手机
  /data/bin/com.reeray.test.act-1/AssetsCopyTest.apk
该死的,居然有个-1
相应的软件空间为:/data/data/com.reeray.test.act/
第一次运行,会将很多库文件,解压到下面
lib文件夹放置so文件。
另外一个最重要的,默认读写文件都在【/data/data/com.reeray.test.act/files/】

4.2 QRC方式。

如图中的DB文件,利用两个文件,一个读出,一个写入即可。
    QFile file (":///nfviews/database/nf_data.db");    
    QFile file2 ("/data/data/com.reeray.test.act/files/nf_data.db");    
    if (!file.open (QIODevice::ReadOnly)) {        
        qDebug() << "Open QRC file error!!!";        
        return; 
    }   
    if (!file2.open (QIODevice::WriteOnly)) { 
           qDebug() << "Open write file error!!!"; 
           return;
     }
    while (!file.atEnd()) {
        QByteArray line = file.readLine(); 
        file2.write (line);
    }

对于程序所需要的文件少,这个方式比较方便。
但是也有明显的缺陷,就是app文件太大,编译慢不说,运行还占内存。
4.3 利用assets
这部分非常复杂,还有用到JAVA,悲剧吧。参考代码是系统自带的Notification实例。
一步步看吧!
4.3.1修改QtActivity
以下是NotificationClient定义Java类的一行代码
public class NotificationClient extends org.qtproject.qt5.android.bindings.QtActivity
以下是默认的AndroidManifest.xml文件内容
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="@string  /app_name" android:screenOrientation="unspecified" android:launchMode="singleTop">
这部分很关键,不修改,没法编译的哦!
想调用自定义Java,必须将默认的QtActivy代替!
com.reeray.test.act.NotificationClient
注意看红色的字体。
前文有图说明NotificationClient文件所在的路径,注意不能错。另外大小写。。。
复制assets的Java代码如下:
    public static void copyRes(String fn)    {
        try {
            File dir = new File("/data/data/com.reeray.test.act/files");
            if (!dir.exists()) 
           dir.mkdir(); 
           InputStream is = m_instance.getApplicationContext().getResources().getAssets().open("test.txt");
            FileOutputStream fos = new FileOutputStream(new File("/data/data/com.reeray.test.act/files/" + fn));
            byte[] buffer = new byte[7168];
            int count = 0;
            while ((count = is.read(buffer)) > 0) {
                fos.write(buffer, 0, count);
            }
            fos.close();
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
调用Java代码:
    QAndroidJniObject ajo = QAndroidJniObject::fromString (m_notification);
    QAndroidJniObject::callStaticMethod<void>("com/reeray/test/act/NotificationClient",
            "copyRes",
            "(Ljava/lang/String;)V",
            ajo.object<jstring>());
PS:如果前面不修改AndroidManifest.xml,这几句是编译不过去的。
大概介绍精髓,详细代码看附件吧(貌似需要用7z打开)
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
5.建议看看c++ ;算是总结吧
自学的语言太多,大多在玩,对性能要求不高。
这几天看了下C++的书,想提高性能的话,还是得看深入介绍的书籍才行。
当然,仅仅是会用,当然是不用看,像我这种半路出家的,呵呵。

描述:4.3 复制assets的文件
附件:  AssetsCopyTest.zip (16 K) 下载次数:13

http://www.qtcn.org/bbs/read-htm-tid-57370-fpage-4.html

QT 那些事的更多相关文章

  1. 跨平台编程:关于VS和QT那些事

    1.Win平台 Qt5.7 for Win32 (VS2013) 编辑器:Qt Creator 4.0 编译器:MSVC12 for X86 (cl.exe&link.exe) 调试器:CDB ...

  2. Qt学习--初学注意事项

    过程.心得: 1)Qt Creator与相关的安装包的安装 我在选择去学习Qt之后,第一件事就是Qt SDK下载安装与配置.最初,在网上发现Qt使用的IDE环境        在Windows上可以选 ...

  3. 浅谈 Qt 布局那些事

    Qt 布局那些事是本文介绍的内容,直接进入主题.GridLayout是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布局中.^__^GridLayout有两 ...

  4. Linux那些事——GTK+, Qt, Gnome, KDE, xWindow, xOrg区别

    Linux那些事--GTK+, Qt, Gnome, KDE, xWindow, xOrg区别 Linux不仅内核开源,系统配置也是高度可定制化的,其中就包括我们所熟知的图形界面,从桌面环境,主题,字 ...

  5. 【QT】 Qt多线程的“那些事”

    目录 一.前言 二.QThread源码浅析 2.1 QThread类的定义源码 2.2 QThread::start()源码 2.3 QThreadPrivate::start()源码 2.4 QTh ...

  6. 静态编译Qt5.4.1和Qt WebKit(网事如风的blog)good

    blog文章地址:http://godebug.org/index.php/archives/133/ WebKit是个好东西,做爬虫.显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以 ...

  7. Qt信号槽的一些事(第一次知道信号还有返回值,以及Qt::UniqueConnection)

    注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的. 1.先说Qt信号槽的几种连接方式和执行方式. 1)Qt信号槽给出了五种连接方式: Qt::AutoConnection 0 自动连接:默认的 ...

  8. Qt信号槽的一些事 Qt::带返回值的信号发射方式

    一般来说,我们发出信号使用emit这个关键字来操作,但是会发现,emit并不算一个调用,所以它没有返回值.那么如果我们发出这个信号想获取一个返回值怎么办呢? 两个办法:1.通过出参形式返回,引用或者指 ...

  9. Qt信号槽的一些事

    注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的. 1.先说Qt信号槽的几种连接方式和执行方式. 1)Qt信号槽给出了五种连接方式: Qt::AutoConnection 0 自动连接:默认的 ...

随机推荐

  1. 【BZOJ 1018】 [SHOI2008]堵塞的交通traffic

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1018 [题意] [题解] 按照这里的题解写的http://blog.csdn.net/ ...

  2. 【noip模拟】德充符

    时间限制:2s 内存限制:512MB [题目描述] 申徒嘉和郑子产都是伯昏无人的学生,子产因为申徒嘉是残疾人,非常看不起他,于是想要刁难他. 子产给了申徒嘉 n个数 a1,a2...an. 现在他要求 ...

  3. webpack单独构建scss文件与.vue组件里构建scss的一个坑

    在入口main.js里构建scss是通过引入模块的方式 import './assets/_reset.scss'; import './assets/_flex.scss'; import './a ...

  4. 机器学习: t-Stochastic Neighbor Embedding 降维算法 (二)

    上一篇文章,我们介绍了SNE降维算法,SNE算法可以很好地保持数据的局部结构,该算法利用条件概率来衡量数据点之间的相似性,通过最小化条件概率 pj|i 与 pi|j 之间的 KL-divergence ...

  5. HDU-4432-Sum of divisors ( 2012 Asia Tianjin Regional Contest )

    Sum of divisors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. Android获取屏幕大小

    本来想着如下方法就能得到了 Display display = getWindowManager().getDefaultDisplay(); Log.i("view", &quo ...

  7. 关于FileZilla上传文件后服务器端文件与本地文件大小不一致的解决方法

    最近在调试网站时发现,通过ftp上传工具FileZilla上传至服务器端的文件与本地文件大小不一致,虽然没有影响网站的最终显示效果,但仍让我困惑不解.后发现是传输类型的原因,解决方法如下: 中文版Fi ...

  8. Visual C# 2010 实现菜单项和状态栏

    演练:向窗体提供标准菜单项 Visual Studio 2010     其他版本     此主题尚未评级 - 评价此主题   可以通过 MenuStrip 控件为窗体提供标准菜单. 此演练演示如何使 ...

  9. 深入python3 (Dive Into Python 3) 在线阅读与下载

    在线阅读:http://book.doucube.com/diveintopython3/  中文版 下载地址:https://github.com/downloads/diveintomark/di ...

  10. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object 版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...