在嵌入式平台 rk3399 上面进行本地编译,会碰到 x86 上没有的问题。

1. stdlib.h not found,原因是头文件位置没有设置。

Tools --> options --> kits --> compile 选择相应的编译器,然后下面的 Header paths 点击 后面的 details,填写头文件地址,比如: /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include

2. error: WARNING: unsafe header/library path used in cross-compilation: '-L/usr/lib' qt嵌入式开发,库需要使用交叉编译的库。

在 pro 文件中,加入下面这样的:

LIBS += \
        -L/home/book/libarmhf -ltoupcam \

3. qt 输出信息到 console

projects --> run --> Run in terminal 然后在 pro 文件中,增加 CONFIG += console 最后在源文件中,直接使用 qDebug() 就可以输出到 console 了。

参考: https://blog.csdn.net/yizhou2010/article/details/52996673

4. qpixmap fromImage 缺省参数无效。

原因是相应的头文件找不到,或者配置不对。 在 pro 文件里面增加:

INCLUDEPATH += /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/opt/ext-toolchain/arm-linux-gnueabihf/include/c++/6.2.1
INCLUDEPATH += /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/opt/ext-toolchain/arm-linux-gnueabihf/include/c++/6.2.1/arm-linux-gnueabihf

然后会提示 stubs.h 找不到 stubs-soft.h。 经过查找,只有 stubs-hard.h,这个是硬件浮点运算。但是 qt 当中找不到 写相应 预编译 指令的地方。尝试修改两个地方,就可以了。 pro 文件。

QMAKE_CXXFLAGS += -mfloat-abi=hard
QMAKE_CFLAGS += -mfloat-abi=hard

stubs.h 文件

#define __ARM_PCS_VFP

这下相关的函数,就可以正常使用了。

5. 普通类转变为 继承 QObject 的子类,必须 rebuild all,让 qmake 重新运行,否则会一直报错。

6. qt5 的槽 可以不用写 slots。 只要写出 signals.

7. 第三方驱动中 so 文件放在 /usr/lib 下就可以,交叉编译的库需要另外放一个文件夹,然后编译的时候,增加路径即可。

参考: https://www.169it.com/tech-qa-linux/article-224882342649989428.html

8. video0 找不到,首先使用 dmesg | grep usb 来看看 usb 里面有没有 camera 的信息。然后 lsusb 来看看具体几个 usb。通过对比 http://www.ideasonboard.org/uvc/ 看看自己的摄像头是不是 uvc 摄像头。

具体参考: https://blog.csdn.net/weixin_43262513/article/details/88073532

9. qt 中 使用 QImage 显示图像: 如果是 RGB888, 24位存储数据。

       QImage img(640,480,QImage::Format_RGB888);//24位
        unsigned char * p_bits=img.bits();
        for(int i=0;i<640*480*3;i+=3)
    {
        puiBits[i]=data[i];
        puiBits[i+1]=data[i+1];
        puiBits[i+2]=data[i+2];
    }
    QPixmap pixmap=QPixmap::fromImage(img);
    pixmap=pixmap.scaled(widget->size());
    widget->setAutoFillBackground(true);
    QPalette palette;
    palette.setBrush(widget->backgroundRole(), QBrush(pixmap));
    widget->setPalette(palette);
    widget->repaint();

也可以把其中填充数据的地方改为:

    for (int y = 0; y < img->height(); y++) {
        memcpy(img->scanLine(y), buf + img->bytesPerLine() * y, img->bytesPerLine());
    }

具体参考: https://www.cnblogs.com/muyuhu/archive/2012/10/31/2748361.html https://stackoverflow.com/questions/14563180/raw-data-to-qimage

10. 基于 QCamera 的一些使用可以参考:

https://blog.csdn.net/Sun_tian/article/details/88063382 https://blog.csdn.net/ACK_ACK/article/details/99799092

11. qt 图片缩放。

平滑缩放: ui->label->setPixmap(QPixmap::fromImage(*img).scaled(ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));

可以使用两级缩放,第一次快速缩放到最终大小的4倍,第二次平滑缩放,这样处理又快又好。 QImage result = img.scaled(800, 600).scaled(200, 150, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

参考: http://blog.sina.com.cn/s/blog_73f981750102uwxj.html https://blog.csdn.net/kfy2011/article/details/77867609 https://www.cnblogs.com/s_agapo/archive/2012/03/14/2395603.html https://blog.csdn.net/keanight/article/details/79150637

12. github 中有一个 toupcam 的代码,可以参考:

https://github.com/JohnDMcMaster/gst-plugin-toupcam

13. usb camera 驱动移植参考:

https://www.cnblogs.com/alan666/p/8311898.html

14. qtcreator 增加 帮助

参考: https://blog.csdn.net/ruglcc/article/details/7996183

还可以安装对应的新版的 qtcreator. 参考: https://blog.csdn.net/L_0x0b/article/details/105965494

15. qtcreator 配置:

kits --> compile --> manual --> c --> custom 里面设置

compile path: /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/bin/arm-linux-gnueabihf-gcc
make path: /usr/bin/make
abi: arm, linux, generic, elf, 32bit
macros: mfloat-abi=hard
header path: /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include

kits --> compile --> manual --> c++ --> custom 里面设置

compile path: /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/bin/arm-linux-gnueabihf-g++
make path: /usr/bin/make
abi: arm, linux, generic, elf, 32bit
macros: mfloat-abi=hard
header path: /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include

kits --> qt version --> manual 里面设置

version name: Qt %{Qt:Version} (host)
qmake location: /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/bin/qmake

kits --> manual 里面设置

name: 100ask_imx6ull
device type: desktop
device: local pc
sysroot: /home/book/100ask_imx6ull-sdk/Buildroot_2019.02/output/host/bin
c: custom
c++: custom
debugger: system gdb
qt version: 5.14.2

16. qtcreator 没有帮助信息,最简单的解决方法是安装新版的 qtcreator,新版的 qtcreator 自带源码和帮助。

参考: https://blog.csdn.net/L_0x0b/article/details/105965494

标签: Qt

添加新评论