您尚未登录。

楼主 #1 2020-04-15 14:40:41

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

想交叉编译个arm板上运行的qt程序,can通信,请教些问题。

板子是nuc972,官方提供的buildroot,构建带qt的根文件系统,qt版本是5.6,勾选了gui,qserialport,但没有qserialbus选项。

照着qt的can例程写了个简单的界面,编译pc版的可以运行,用arm板的qmake编译,就报错:

/home/any/nuc970bsp/20200318/NUC970_Buildroot/output/host/usr/bin/qmake -o Makefile nuc972can.pro
Project ERROR: Unknown module(s) in QT: serialbus
Makefile:180: recipe for target 'Makefile' failed
make: *** [Makefile] Error 3

程序里引用了QCanBus和QCanBusDevice,我看qt5.6里关于这两个类的介绍,pro里需要引入serialbus模组。

---------------------------------------------------------------------------------------------------------------------------------

看了buildroot里的关于qt的配置,没有选qserialbus这个,估计选这个就可以了。

反正开贴了,就问其他关于qt can的问题吧。

运行了qt里的can例程,关于配置,有"Select CAN plugin"选项:
{passthrucan, peakcan, socketcan, tinycan, virtualcan}。

下面还有个列表:"Specify CAN interface name",大部分情况下是空白的。
上边选"tinycan"时,这个可以选"can0.0";
上边选"virtualcan"时,这里可以选"can0"或"can1"。

我原以为can配置这里和串口类似呢。搞不懂上边的含义,望指点。

最近编辑记录 Gentlepig (2020-04-15 15:11:31)

离线

楼主 #2 2020-04-15 15:08:13

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: 想交叉编译个arm板上运行的qt程序,can通信,请教些问题。

重新编译buildroot后,新制作的qmake再make后,不报刚才那个错了。
不过又有新的错误:

../nuvotoncan.cpp:40:56: 错误:对‘QComboBox::addItems(QList<QByteArray>)’的调用没有匹配的函数
     cmbCanPort->addItems(QCanBus::instance()->plugins());
                                                        ^
../nuvotoncan.cpp:40:56: 附注:备选是:
In file included from ../../../../nuc970bsp/20200318/NUC970_Buildroot/output/host/usr/arm-nuvoton-linux-uclibcgnueabi/sysroot/usr/include/qt5/QtWidgets/QComboBox:1:0,
                 from ../nuvotoncan.h:6,
                 from ../nuvotoncan.cpp:1:
../../../../nuc970bsp/20200318/NUC970_Buildroot/output/host/usr/arm-nuvoton-linux-uclibcgnueabi/sysroot/usr/include/qt5/QtWidgets/qcombobox.h:173:17: 附注:void QComboBox::addItems(const QStringList&)
     inline void addItems(const QStringList &texts)
                 ^
../../../../nuc970bsp/20200318/NUC970_Buildroot/output/host/usr/arm-nuvoton-linux-uclibcgnueabi/sysroot/usr/include/qt5/QtWidgets/qcombobox.h:173:17: 附注:  no known conversion for argument 1 from ‘QList<QByteArray>’ to ‘const QStringList&’
Makefile:775: recipe for target 'nuvotoncan.o' failed
make: *** [nuvotoncan.o] Error 1

电脑端的qmake5.14可以编译运行的,交叉编译的qmake5.6就不行...
我也看了5.6版的qt,QComboBox有addItems()这个函数,QCanBus也有instance()和plugins()方法。

-------------------------------------

5.6版本的canBus的plugin()方法返回的是QList<QByteArray>类型。
5.14版本的canBus的plugin()方法返回的是QStringList类型。

那么,QList<QByteArray>如何转换为QStringList呢?

-------------------------------------

qt学习群的朋友回复了:

QList<QByteArray> listCanPort;
QStringList listStrCanPort;
listCanPort = QCanBus::instance()->plugins();
for(int i = 0; i < listCanPort.size(); i++)
    listStrCanPort.append(listCanPort[i]);

可以通过编译,下载到arm板上可以运行。

那么,接下来的问题还是:
peakcan,socketcan,tinycan;
这些都是什么啊?

最近编辑记录 Gentlepig (2020-04-15 16:55:32)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn