原博客网址: https://blog.csdn.net/yikai2009/article/details/8826132
因为我的路径稍有不同,为了减轻下次开发难度(下次不知道什么时候开发呢),特意复制粘贴过来,为己所用^_^
我用的是友善之臂的tiny210
完成了 Qt 在 PC 上和 ARM 上的编译,
一般制作 ARM 下的应用程序,可以先在 X86 下实现,最后再移植到 ARM 下.
设置 Qt 变量:(未设置)
再在 终端 qtopia 目录下,source setX86_QpeEnv .
- [root@localhost Qte]# pwd
- /opt/EmbedSky/Qte
- [root@localhost Qte]# source setX86_QpeEnv
- [root@localhost Qte]#
完成设置变量的操作,注意这个变量设置的操作仅在当前终端下有效.
图形按钮制作步骤:
1, 建立 Qt 的项目文件:
在 PC Linux 的 " /opt/EmbedSky/Qte/x86_qtopia/pro " 目录下建立一个名为:first 的目录.
以后的 应用程序 都放到 " pro/ " 目录下.
2, 在后台启动 qt 设计器:
qt2/bin/designer &
友善之臂路径:
在后台运行:
- [root@localhost x86-qtopia-2.2.0]# pwd
- /opt/EmbedSky/Qte/x86-qtopia-2.2.0
- [root@localhost x86-qtopia-2.2.0]# qt2/bin/designer &
- [1] 6543
- [root@localhost x86-qtopia-2.2.0]#
3, 新建一个 qt 工程:
4, 主界面名称 和 标题信息:
5, 新建按钮:
6, 按钮名称 和 按钮显示信息:
7, 添加按钮响应函数:
完成上面的设置后,需要添加函数,使得刚刚建立的按钮能对其进行响应.
8, 建立 信号 与 槽 的关联:
下面的操作涉及到 Qt 中的信号和槽的概念,可以理解为 按钮的操作是 信号,
槽 就是该操作所响应的函数.
同样建立 close 按钮的 信号 和槽的相应关联.
9, 去除 close 函数:
回到第 7 步,去除 close 函数:
10, 保存工程文件:
uic 产生源代码 first . h first . cpp moc_first . cpp:
使用 uic 软件将刚刚建立的工程转换为源代码.
首先建立一个可执行的脚本来完成文件的转换.
1, 建立 ui2cpp 脚本:
- #gedit ui2cpp
2, 设置脚本为可执行:
- #chmod +x ui2ccp
3, 执行 ui2cpp 脚本, 生成源码:
- #./ui2cpp
4, 注意 ui2ccp 脚本:
每次使用 设计器修改 并 保存 *.ui 的工程文件后,必须使用 ui2cpp 脚本 重新产生源代码,否则会编译出错,
所以一般,使用 设计器 做完界面后,就不再使用了 而是直接修改生成的源代码.
新建添加 main . cpp 文件 ,将 可执行文件 和 主界面名称 关联:
这里用到上面脚本生成的 头文件,操作如下:
- #gedit main.cpp
使用 progen 产生 * . pro 文件:
使用 tmake 中的 progen 软件产生 pro 文件:
完善 * . pro 文件:
使用 上步的 * . pro 文件生成 Makefile 文件:
1, 使用 tmake 软件生成 Makefile 文件:
使用上步的 pro 文件使用 tmake 软件生成 Makefile 文件.
- #tmake -o Makefile first.pro
2, 修改 Makefile 文件 注意 重复出现 问题:
关于 重复出现 的问题,可以参考我博客的 qtopia-2.2.0 make overriding commands --- 问题解决
http://blog.csdn.net/yikai2009/article/details/8825201
下面只列出修改的代码:
- LINK = g++
- TARGET = $(QPEDIR)/image/opt/Qtopia/bin/first
- DESKTOP = $(QPEDIR)/image/opt/Qtopia/apps/EmbedSky/first.desktop
- ICON = $(QPEDIR)/image/opt/Qtopia/pics/first.png
- all: $(TARGET)
- cp -f first.desktop $(DESKTOP)
- cp -f first.png $(ICON)
- clean:
- -rm -f $(OBJECTS) $(OBJMOC) $(DESKTOP) $(ICON) $(TARGET)
- -rm -f *~ core
编译出错
main.cpp: In function ‘QWidget* create_first(QWidget*, const char*, uint)’:
main.cpp:5: error: expected type-specifier before ‘first’
main.cpp:5: error: cannot convert ‘int*’ to ‘QWidget*’ in return
main.cpp:5: error: expected ‘;’ before ‘first’
main.cpp:5: error: ‘first’ was not declared in this scope
原因:
你的first.cpp中setName("first")是这样的吗?如果不是改过来就可以了。 问题主要出在.ui文件的文件名虽然改成first.ui但里边的内容根本就没有改成和文件名相符的名字,因此编译时出现这种错误。 |
所以,将QTOPIA_ADD_APPLICATION("camera",camera)中后面的camera改成Camera即可
制作桌面启动器 * . desktop 即是 桌面显示的应用程序 名称:
- #gedit first.desktop
制作 中文 启动器:
制作 桌面 图标 --- Icon:
在 ps 下:
将 ICON 图标 拷贝到 当前 项目目录中.
修改 * . cpp 文件:
为了实现前面的 按下 user_button 按钮,出现打印信息,需要修改 first.cpp 源文件.
- void first::user_button()
- {
- user_t->setText( tr( "Hello, Qt Application !" ) );
- // qWarning( "first::user_button(): Not implemented yet!" );
- }
编译 并 仿真:
编译 make :
- #make
仿真 /optEmbedSky/Qte/test_x86 :
将代码复制到/opt/Qtopia/bin目录下,执行
出现下面错误:
1.[root@FriendlyARM bin]# ./camera
./camera: error while loading shared libraries: libqtopia.so.1: cannot open shar
ed object file: No such file or directory
原因:未将so考到开发板上。在考so的时候遇到一个问题,虚拟机的连接文件怎么考入开发板,我用了一个笨方法,那就是压缩,压缩之后把压缩包经Windows考入到开发板上,在开发板上解压即可
2.[root@FriendlyARM bin]# ./camera
Cannot find font definition file /usr/local/qt-embedded/lib/fonts/fontdir - is $
QTDIR set correctly?
解决办法:将qt2路径下的fonts考到开发板即可,如果开发板usr下没有报错路径,则新建文件路径即可