嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序

上篇文章介绍了如何搭建在Linux开发板中搭建Qt的运行环境,并测试了Qt自带的例程。

本篇,来介绍如何自己编写一个Qt程序,并将编译结果放到Linux开发板中运行。

1 Windows上编写Qt程序

因为Qt是支持跨平台的,所以我们可以先在Windows平台上编写和查看Qt的运行效果,然后再通过交叉编译,编译出ARM Linux平台的可执行文件,最终放到开发板中查看运行结果。

Windows上需要安装Qt Creator软件来开发Qt程序,该软件的安装过程,和大多数软件的安装过程都差不多,在此不再演示安装过程。

下面介绍如何创建一个Qt工程。

1.1 新建Qt工程

Qt Creator本质也是一个集成开发环境,与Visual Studio之类的创建工程的流程类似,其软件界面如下:

创建工程,选择左上角菜单中的“文件”->“新建文件或项目”,弹出如下窗口,然后默认选择Qt Widgets Application,然后右下加点击“Choose"按键:

出现选择项目工程的存放位置,然后再下一步:

这里会用到Visual Studio中的一些功能,默认即可,然后下一步:

然后要选择类信息,基类里可选的有QMainWindow、QWidget和QDialog,这里我们选择QWidget。

下面还有一个”创建界面“的勾选框,那个是用来通过图形化的方式设计显示界面,本篇暂用不到,先取消勾选,然后点下一步

到这里,Qt工程就创建好了,点完成:

创建的Qt工程如下,主要包含4个文件:

  • clock.pro:Qt工程的配置文件
  • main.cpp:主程序
  • widget.cpp:窗口程序
  • widget.h:窗口程序的头文件

1.2 代码编写(时钟程序)

Widget的构造函数

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);

    setWindowTitle(tr("Clock"));
    setMinimumSize(200, 200); //设置最小尺寸
}

首先创建了一个Qt的定时器,设置超时时间为1s(1000ms),超时时间到,更新表盘的显示。

第2行是Qt中最常用的信号和槽机制:

connect(timer, SIGNAL(timeout()), this, SLOT(update()));

信号和槽,简单的立即,就是信号SIGNAL出现后(1s定时器超时),触发槽SLOT函数执行(更新表盘的显示)

界面设计

时钟程序中的表盘,表针等,都是通过画图的方式实现的,具体的代码如下:

void Widget::paintEvent(QPaintEvent *event)
{
    int side = qMin(width(), height());
    QTime time = QTime::currentTime();

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.translate(width()/2, height()/2); //画图的基准位置
    painter.scale(side/200.0, side/200.0); //随窗口尺寸自动缩放

    //表盘
    for (int i=0; i<PANEL_RADIUS_NUM; i++)
    {
        QBrush brush(stPanelParaArr[i].color);
        QPen pen(stPanelParaArr[i].color);
        painter.setBrush(brush);
        painter.setPen(pen);
        painter.drawEllipse(-stPanelParaArr[i].radius, -stPanelParaArr[i].radius, 2*stPanelParaArr[i].radius, 2*stPanelParaArr[i].radius);
    }

    //小时的表针
    painter.setPen(Qt::NoPen);
    painter.setBrush(hourColor);

    painter.save();
    painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
    painter.drawConvexPolygon(hourHand, 3);
    painter.restore();

    //小时的刻度
    painter.setPen(hourColor);
    for (int i = 0; i < 12; ++i)
    {
        painter.rotate(30.0);
        painter.drawLine(PANEL_RADIUS3-6, 0, PANEL_RADIUS3, 0);
        QFont font("TimesNewRoman", HOUR_NUM_SIZE);
        painter.setFont(font);
        painter.drawText(-HOUR_NUM_SIZE, -(CLOCK_RADIUS-15), 2*HOUR_NUM_SIZE, 2*HOUR_NUM_SIZE, Qt::AlignHCenter, QString::number(i+1));
    }

    //分钟的表针
    painter.setPen(Qt::NoPen);
    painter.setBrush(minuteColor);

    painter.save();
    painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
    painter.drawConvexPolygon(minuteHand, 3);
    painter.restore();

    painter.setPen(minuteColor);
    for (int j = 0; j < 60; ++j)
    {
        if ((j % 5) != 0)
        {
            painter.drawLine(PANEL_RADIUS3-4, 0, PANEL_RADIUS3, 0);
        }
        painter.rotate(6.0);
    }

    //秒钟的表针
    painter.setPen(Qt::NoPen);
    painter.setBrush(secondColor);

    painter.save();
    painter.rotate(6.0 * time.second());
    painter.drawConvexPolygon(secondHand, 3);
    painter.restore();

    painter.end();
}

第2句:

QTime time = QTime::currentTime();

是来获取系统的当前时间。

1.3 编译运行

现在Windows平台中编译运行,查看效果:

该时钟是可以根据窗口大小的变化,自动进行放到或缩小显示的:

2 Ubuntu中交叉编译Qt

Windows中测试通过后,就需要编译出能够在ARM平台运行的可执行程序了,这里需要在Ubuntu中进行编译。

2.1 复制源文件到Ubuntu中

将Windows中的QT工程源码,复制到Ubuntu中,注意.user文件是不需要的,这个是Windows平台的编译配置。

复制到Ubuntu中的合适位置:

2.2 交叉编译

编译ARM平台的Qt程序,需要使用ARM平台的编译工具链。

上篇文章,在搭建Qt环境,编译Qt源码时,已经生成了ARM平台的Qt编译工具链,其位置是在上篇文章介绍的make install那一步的安装位置,我的是在”/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/“,这里需要先用到它的qmake工具先自动生成Makefile文件,再通过make指令进行编译。

首先的使用qmake生成Makefile,进入程序源码目录,执行qmake指令:

/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/bin/qmake

成功执行之后,就可以看到自动生成的Makefile文件:

然后执行make指令进行编译:

make

编译完可以看到可执行文件clock。

我们可以再使用file命令查看该可执行文件的平台信息:

file clock

可以看到该可执行文件是ARM平台的。

3 Linux开发板中运行Qt程序

3.1 复制可执行文件到开发板中

此次测试,仍然使用的是网络位置挂载根文件系统的方式,通过如下指令将可执行文件复制到根文件系统中(开发板中):

sudo cp clock ~/myTest/nfs/rootfs/myProj/qt/mytest/

3.2 查看开发板中的运行效果

然后就可以在开发板中执行该程序,查看效果了:

./clock

运行效果如下:

由于板子的网络时间还不能正确获取,这里显示的时间其实是不对的,不过表针仍然会1秒1秒的走动。

4 总结

本篇详细介绍了如何自己编写一个Qt程序,如何通过交叉编译,最终放到开发板中执行的过程。

Qt软件和完整程序源码,公众号后台回复“Qt”获取~

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于s5pv210和arm-linux及qt的嵌入应用系统设计是一种嵌入系统设计方案,它采用了s5pv210芯片作为主控制器,使用arm-linux作为操作系统,同时使用qt作为图形界面开发框架。这种方案可以用于开发各种嵌入应用系统,如智能家居、智能机器人、智能医疗等。它具有低功耗、高性能、可靠性高等优点,可以满足各种嵌入应用的需求。 ### 回答2: S5PV210是一款嵌入系统芯片,具有高性能、低功耗的特点,广泛应用于智能手机、平板电脑、车载电子等领域。而ARM Linux是一种基于Linux内核的操作系统,具有开放性、安全性和可移植性等优点。QT是一个跨平台的GUI应用程序框架,能够实现丰富的用户界面和多种输入设备的支持。 基于S5PV210和ARM Linux,我们可以设计出高性能、低功耗的嵌入系统。在系统中引入QT,可以使嵌入设备的用户界面更加友好、美观,进而提升用户体验。具体的设计方案可以按照以下步骤: 1. 系统的硬件设计:选择合适的板卡,布置芯片和电路。其中S5PV210作为主要芯片,连接各种设备,如显示屏、触摸屏、WiFi、蓝牙等,为系统提供各种功能和服务。 2. 系统的软件设计:选择ARM Linux作为操作系统,搭建相应的开发环境,利用QT进行界面设计和编程。QT的嵌入版本可以支持ARM架构的设备,方便我们开发嵌入应用。 3. 编写应用程序:根据实际需求,编写各种应用程序,如图形界面、网络应用、文件管理、多媒体播放等。 4. 调试和优化:在实际制作和测试中,发现问题、调试程序,持续优化系统性能和用户体验。 通过以上设计和实现,可以得到高性能、低功耗、美观、易用的嵌入应用系统。这样的系统可以应用于车载电子、智能家居、工业自动化等领域,具有广泛的市场前景。 ### 回答3: 基于s5pv210和arm-linux及qt的嵌入应用系统设计是一种新型的嵌入系统设计方案。该方案可以提高嵌入系统的运行效率,降低开发成本,同时还能提高软件的稳定性和可维护性。 在该系统中,s5pv210是主控芯片,它采用了先进的ARM架构,拥有高度集成的内置组件和周边设备,比如LCD显示控制器、USB控制器等。这些内置组件可以让嵌入应用系统具备更好的内存管理、外围设备管理和数据处理能力。 而arm-linux则是该系统的操作系统,与传统的嵌入操作系统相比,它具有更强的兼容性、更好的软硬件结合性和更高的性能。其可以支持更多的应用程序和驱动程序,并且灵活性也更高。 作为嵌入应用系统的UI框架,Qt简化了开发流程,提高了开发效率,可以让开发者更加专注于用户界面的设计。同时,Qt也是跨平台的,这意味着开发者可以更轻松地将应用程序迁移到其他平台上。 该嵌入系统设计方案的应用非常广泛,在智能家居、医疗设备、智能手表等领域都有重要的应用。通过该系统的设计,这些设备可以更好地实现人机交互,提高用户体验和工作效率。它还可以提供更高的安全性和数据保护能力,保护用户的隐私和数据安全。 总之,基于s5pv210和arm-linux及qt的嵌入应用系统设计是一种具有高度可靠性、高效性和可维护性的新型系统设计方案,可以为很多应用场景提供更好的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值