首先我们需要自己写一个代码,什么 代码都行,拿来别人的也可以。可以在windows或者linux上写都行,我个人的习惯是在windows下面编辑代码,查看运行效果,效果没问题了在拿到linux下进行交叉编译。
下面我们现在windows下写一个最简单的例子:你好世界!
这个例子中会使用到中文和按钮切换标签的内容。
如何创建工程这里就不细讲了,书上和网上有很多教程,按照步骤去做就好。
代码很简单,如下:
main.cpp文件
#include "mainwindow.h"
#include <QApplication>
#include <QFont>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
//中文支持
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); //支持中文
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); //支持中文文件名显示
QFont font;
//font.setPointSize(160); //16的字号
font.setPixelSize(16);
font.setFamily(("wenquanyi"));
font.setBold(false);
a.setFont(font);
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
ui->label->setText(tr("你好世界!"));
}
界面如下:
然后我们在windows上运行一下看看
后面的是按下按钮之后。
然后就可以将我们的文件复制到linux 下面去进行交叉编译了,这里只需要复制源码文件,工程文件建议删除,因为在交叉编译的时候会生成新的工程文件,我的文件如下
把他们压缩成一个包,到linux下面去解压,然后使用终端跳转到这写文件的路径下
linux@ubuntu:~/16021/QTprog$ cd chinesefont-linux/
然后找到交叉编译出来的qmake路径使用qmake -project
linux@ubuntu:~/16021/QTprog/chinesefont-linux$ /home/linux/arm/qt-4.8.5-arm/bin/qmake -project
有的人会把这个交叉编译qmake设置为环境变量,我习惯把x86下的qmake设置为环境变量,这样就可以在linux下面查看效果,但是在交叉编译的时候就需要输入qmake的全路径,如何设置还需要根据个人需要。
这时候目录下就会出现.pro的工程文件
然后我们在qmake就可以生成makefile
linux@ubuntu:~/16021/QTprog/chinesefont-linux$ /home/linux/arm/qt-4.8.5-arm/bin/qmake
然后使用make编译
之后会出现可执行文件,比如我的是chinesefont
把它拷贝到开发板的文件系统上,路径随意。我是直接拷贝到根目录下,然后需要一个启动脚本
#!/bin/sh
base1=qpe
pid=`/bin/pidof $base1`
if [ -n "$pid" ]; then
killall $base1
fi
base2=qss
pid=`/bin/pidof $base2`
if [ -n "$pid" ]; then
killall $base2
fi
base3=quicklauncher
pid=`/bin/pidof $base3`
if [ -n "$pid" ]; then
killall $base3
fi
base4=fluidlauncher
pid=`/bin/pidof $base4`
if [ -n "$pid" ]; then
killall $base4
fi
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QTDIR=/home/linux/arm/qt-4.8.5-arm/
export LD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/bin
if [ -c /dev/input/event2 ]; then
export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"
if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
rm /etc/pointercal
/root/tslib/build/bin/ts_calibrate
fi
else
export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
>/etc/pointercal
fi
export QWS_KEYBOARD=TTY:/dev/tty1
FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)
#export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
case "$FB_SIZE" in
800,480)
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
480,272)
export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
;;
*)
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
esac
#export QWS_DISPLAY=:1
export HOME=/root/QtE4Home
#cd /home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher(qt可执行文件的路径)
./chinesefont -qws
其中倒数第二行是跳转到可执行文件的路径下,根据自己的需要进行修改,我的脚本和可执行在同一个目录,所以我把这行注释掉了。
最后一行就是启动可执行程序,结尾的-qws是必须的。
然后我们在开发板上运行一下,看一下效果:
是不是和电脑看到一样,如果想做成开机启动,只需要将启动脚本加入到/etc/init.d/rcS里面就可以了。
讲到这里我们就已经从windows安装到linux安装再到arm平台交叉编译,最后将自己的程序运行起来了 。