板子是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)
离线
重新编译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)
离线
学习了,感谢分享
离线