qiao--- 发表于 2024-2-13 10:47

【Luckfox幸狐 RV1106 Linux 开发板】5-给系统移植QT环境__显示电子时钟界面

<div class='showpostmsg'> 本帖最后由 qiao--- 于 2024-2-13 10:56 编辑

<p><span style="font-size:20px;">前言:</span></p>

<p>在上期测评我成功驱动了TFT_RGB屏幕,这一期测评我们就在上期测评的基础上移植QT,这样我们就可以简单的开发各种好看的GUI界面。我这一期我打算用buildroot构建Linux的QT环境,大家对QT感兴趣的可以看一下我之前测评的另一篇移植QT的文章,那一篇是使用编译QT然后传输到板子的方式来移植QT。</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:22px;">1.buildroot配置选择QT并编译</span></strong></p>

<p>我们进入buildroot目录进行图形化配置QT</p>

<pre>
<code>cd &lt;SDK 目录&gt;/sysdrv/source/buildroot/buildroot-2023.02.6/
make luckfox_pico_defconfig
make menuconfig</code></pre>

<p>我们搜索一下QT5,并跳转到其位置</p>

<p> &nbsp;</p>

<p>我们选中它,并进入配置一下QT,大家可以根据自己的情况自由配置QT,我的配置如下所示</p>

<p> &nbsp;&nbsp;&nbsp;</p>

<p>配置好后保存配置,并在当前目录编译一下</p>

<pre>
<code>make savedefconfig
make</code></pre>

<p>这个过程需要持续一段时间,编译好后然后我们可以在output目录下看到一下编译结果</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>我进入SDK主目录下,编译出我们需要的文件系统格式</p>

<pre>
<code>./build.sh rootfs</code></pre>

<p>最终编译结果会输出到SDK的output目录下</p>

<p>我们将这个rootfs.img替换原来的那个烧录进系统就行了。</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:22px;">2.添加环境变量,并运行测试QT</span></strong></p>

<p>我们进入系统的/usr/lib目录可以看到我们编译成功的QT库,如下</p>

<p> &nbsp;</p>

<p>证明我们的根文件系统构建的没有错,我们接下来部署一下环境变量,方便我们的程序调用上面的库</p>

<pre>
<code>vi /etc/profile</code></pre>

<p>&nbsp;</p>

<p>因为我的屏幕不是触摸屏,其实我只需要添加上面圈出的一部分就行了,如果大家的是触摸屏还需要添加上面的tslib部分的环境变量</p>

<p>现在我们的所有QT环境都已经部署好,我们运行一下QT自带的例子,效果如下</p>

<p>a9c9ec484ff51a50e0bff07060b9e7d8<br />
&nbsp;</p>

<p><strong><span style="font-size:22px;">3.显示电子时钟界面</span></strong></p>

<p>我们进入QTcreator进行开发,大家对这个东西不了解的可以看一下我以前的测评。</p>

<p>我们将屏幕调整为我们屏幕的大小</p>

<p> &nbsp;</p>

<p>构建一个UI</p>

<p> &nbsp;</p>

<p>然后为这个UI添加上代码,如下:</p>

<pre>
<code>#include "home.h"
#include "ui_home.h"

home::home(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::home)
{
    ui-&gt;setupUi(this);
    my_timer = new QTimer(this);
    connect(my_timer,SIGNAL(timeout()),this,SLOT(slot_timeout()));
    my_timer-&gt;start(1000);
   /* 设置样式*/
    QPalette pal = this-&gt;palette();
    pal.setBrush(QPalette::Background,QBrush(QPixmap(":/png/背景.png")));
    setPalette(pal);

    ui-&gt;label_time1-&gt;setText(QDateTime::currentDateTime().toString("yyyy-MM-dd ddd"));
    ui-&gt;label_time2-&gt;setText(QTime::currentTime().toString("hh:mm"));

}

home::~home()
{
    delete ui;
}

void home::slot_timeout(void){
    /*获取时间*/
    ui-&gt;label_time1-&gt;setText(QDateTime::currentDateTime().toString("yyyy-MM-dd ddd"));
    ui-&gt;label_time2-&gt;setText(QTime::currentTime().toString("hh:mm:ss"));

}
</code></pre>

<p>我们用交叉编译工具编译下移植到我们的板子上就行了。</p>

<p>给大家看看时钟的最后效果:</p>

<p>c70476d724def5d71be45880ebe5860f<br />
&nbsp;</p>

<p><span style="font-size:20px;">总结:</span>通过本期测评我能够成功的移植QT的开发环境,在此之后我们能够应用QT开出各种好看的GUI界面。</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

qiao--- 发表于 2024-3-22 13:32

本帖最后由 qiao--- 于 2024-3-22 14:15 编辑

<p><!--StartFragment --></p>

<p>可能有的不熟悉&nbsp;QT的贴友会不知道如何编译,我这里把编译步骤给补充出来。<br />
由于之前我的那个编译后的buildroot不见了,我这里又花了接近两个小时重新编译了一遍<img height="53" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/sad.gif" width="54" /></p>

<p>接一楼帖子编译后的buildroot那个地方开始讲。我们将buildroot编译好后在&lt;SDK目录&gt;/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/output/build/qt5base-2ffb7ad8a1079a0444b9c72affe3d19b089b60de/qmake/qmake<br />
目录下会有qmake编译构建工具如下图所示</p>

<p>&nbsp; 我们可以在这个目录下看下qmake的版本</p>

<p>&nbsp; 有了qmake之后,我们就可以在我们的QT工程下构建Makefile文件了,然后使用make进行编译就可以了</p>

<p>记住在编译之前最好配置一下SDK的交叉编译环境</p>

<p>cd &lt;SDK目录&gt;/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/<br />
source env_install_toolchain.sh</p>

<p>这里我将qmake导出置环境变量export PATH=$PATH:&lt;SDK目录&gt;/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/output/build/qt5base-2ffb7ad8a1079a0444b9c72affe3d19b089b60de/qmake</p>

<p>我们以我之前的一个QT工程为例,在有.pro为后缀的文件夹下面输入qmake &amp;&amp; make&nbsp; 就编译成功了</p>

<p> &nbsp;</p>

<p>最终会在当前目录下生成一个可执行文件,我们可以用file命令看看他是什么架构上的文件</p>

<p> &nbsp;&nbsp;&nbsp;</p>

<p>&nbsp;</p>

<p>常见问题:</p>

<p>用qmake &amp;&amp; make出现下面情况</p>

<p>&nbsp;</p>

<p>这个原因是你在用buildroot配置QT5的时候没有选上widgets,配置时候勾选上就行了</p>

<p> &nbsp;</p>

chejm 发表于 2024-2-28 21:29

<p>&nbsp;</p>

<p>非常感谢楼主分享的技术信息,楼主提供的技术资料声情并茂,非常实用</p>

qiao--- 发表于 2024-2-28 21:55

chejm 发表于 2024-2-28 21:29
&nbsp;

非常感谢楼主分享的技术信息,楼主提供的技术资料声情并茂,非常实用

<p>感谢支持</p>

一荤一素 发表于 2024-3-22 10:39

<p>大佬如何交叉编译到RV1106里面,arm-rockchip830-linux-uclibcgnueabihf-gcc main.cpp -o main 报错,按照你这个帖子的话(https://bbs.eeworld.com.cn/thread-1267168-1-1.html),要怎么加进去,望指点。</p>

qiao--- 发表于 2024-3-22 10:47

一荤一素 发表于 2024-3-22 10:39
大佬如何交叉编译到RV1106里面,arm-rockchip830-linux-uclibcgnueabihf-gcc main.cpp -o main 报错,按照 ...

<p>QT的工程是用makefile管理的,要用make进行编译,这里我下午依旧在这个帖子上会把编译的部分补充上来</p>

damiaa 发表于 2024-3-22 10:55

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3308813&amp;ptid=1271835" target="_blank"><font color="#999999">一荤一素 发表于 2024-3-22 10:39</font></a></font> 大佬如何交叉编译到RV1106里面,arm-rockchip830-linux-uclibcgnueabihf-gcc main.cpp -o main 报错,按照 ...</blockquote>
</div>

<p>&nbsp;</p>

<p>楼主用心了。</p>

<p>只可惜rv1106没mipi dsi接口。</p>

<p>&nbsp;</p>

<p>要看看错误,如果找不到arm-rockchip830-linux-uclibcgnueabihf-gcc 就要把环境变量加到系统里面。或者用绝对路径。或者用makefile cmake 但都要让命令认得路径。</p>

一荤一素 发表于 2024-3-22 11:18

本帖最后由 一荤一素 于 2024-3-25 09:56 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3308823&amp;ptid=1271835" target="_blank"><font color="#999999">damiaa 发表于 2024-3-22 10:55</font></a></font> &nbsp; 楼主用心了。 只可惜rv1106没mipi dsi接口。 &nbsp; 要看看错误,如果找不到arm-ro ...</blockquote>
</div>

<p>大佬真的牛</p>

qiao--- 发表于 2024-3-22 14:18

一荤一素 发表于 2024-3-22 11:18
不是编译器的问题,我可以编译其它程序在开发板上运行,是对QT的不熟悉。

<p>如何交叉编译我已更新帖子,现在置顶为本帖的二楼,可以关注一下</p>

qiao--- 发表于 2024-3-25 09:16

一荤一素 发表于 2024-3-22 11:18
damiaa 发表于 2024-3-22 10:55 &nbsp; 楼主用心了。 只可惜rv1106没mipi dsi接口。 &nbsp; 要看看错误, ...

<p>这里可以下各版本的QT&nbsp;&nbsp;http://download.qt.io/archive/qt/</p><br/>

splendor 发表于 2024-5-22 13:56

<p>你好,按照你的配置,我的应用到板子上什么字也不能显示。英文,汉字都不行。</p>

qiao--- 发表于 2024-5-22 17:33

splendor 发表于 2024-5-22 13:56
你好,按照你的配置,我的应用到板子上什么字也不能显示。英文,汉字都不行。

<p>你配置应该是对的,字库没有可用内容,搞一个字体文件到字库目录下就行了</p><br/>

dumasters 发表于 2024-6-18 14:27

<p>大佬我想配置buildroot 为qt4.8.6 ,该怎么操作啊?求教一下</p>

jafatek 发表于 2024-6-21 09:57

<p>感谢大佬,根据您的步骤一点点操作完美运行。膜拜,辛苦了</p>

qiao--- 发表于 2024-6-22 00:22

jafatek 发表于 2024-6-21 09:57
感谢大佬,根据您的步骤一点点操作完美运行。膜拜,辛苦了

<p>感谢支持</p>

羽落清泫 发表于 2024-8-16 17:31

<p> &nbsp;</p>

<p>为什么这里选不了qt5,是需要下载源码嘛?</p>

qiao--- 发表于 2024-9-7 14:12

羽落清泫 发表于 2024-8-16 17:31
&nbsp;

为什么这里选不了qt5,是需要下载源码嘛?

<p>应该是依赖其他的模块,你可以看看依赖关系</p>

yyyypppp 发表于 2024-10-21 14:09

请问qt自带的例子是那个命令
页: [1]
查看完整版本: 【Luckfox幸狐 RV1106 Linux 开发板】5-给系统移植QT环境__显示电子时钟界面