一直做的是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. HDU 1081 To The Max - 最大字段和

    传送门 题目大意: 求一个矩阵的最大子矩阵和. 题目分析: 刚开始考虑了一下dp方程的递推,但是不好转.简便的方法是预处理sum[i][j]表示第i行的前j个元素之和,之后\(n^3\)枚举子矩阵就可 ...

  2. Linux硬件信息查询命令

    系统 uname -a              # 查看内核/操作系统/CPU信息 Linux hostname 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 ...

  3. Docker + .NET Core(二)

    原文:Docker + .NET Core(二) 前言: 环境:centos7.5 64 位 正文: 首先我们在宿主机上安装 .NET Core SDK sudo rpm --import https ...

  4. 多线程中的lock,Monitor.Wait和Monitor.Pulse

    我们知道lock实际上一个语法糖糖,C#编译器实际上把他展开为Monitor.Enter和Monitor.Exit,即: lock(lockObj) { //... } ////相当于(.Net4以前 ...

  5. C# powshell 调用

    原文:C# powshell 调用 本文告诉大家如何在 ps 脚本使用 C# 代码. 首先创建一个 C# 的控制台项目,注意修改输出为类库. 现在的 Powershell 还不支持 dotnet co ...

  6. WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)

    原文 WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object) 众所周知的,WPF 中多数对象都继承自 Dispatch ...

  7. altium designer电气符号和包的常用元素

    1. 标准电阻:RES1.RES2.包裹:AXIAL-0.3至AXIAL-1.0 两port可变电阻器:RES3.RES4.包裹:AXIAL-0.3至AXIAL-1.0 三port可变电阻:RESIS ...

  8. Net多线程编程

    Net多线程编程—使用Visual Studio 2012进行调试 1 相关概念 1)栈帧 C语言中,每个栈帧对应着一个未运行完的函数.栈帧中保存了该函数的返回地址和局部变量. 栈帧也叫过程活动记录, ...

  9. java学习笔记(7)——I/O流

    一.File类 File(File parent, String child); File(Stirng filename); ------------------------------------ ...

  10. [LeetCode] Subsets [31]

    题目 Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must ...