Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

qt 5.5.1 can't display in linuxfb:fb1



  • I recently wrote a QT program to embed Linux with two buffer frames: dev / fb0 and dev / FB1

    Through export QT_ QPA_ PLATFORM= linuxfb:fb=/dev/fb0 |1 control output

    It is found that the program can output to fb0, but not to FB1

    QT version is 5.5.1, which God can help me


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    Which device is that ?
    Do you mean that if you force the frame buffer to 1 it does not work ?
    What exact line do you use when it fails ?
    Do you get any error message ?
    Is there anything in the system logs with regard to that ?
    Do you have any other application that can output on the second frame buffer ?
    Are you locked to that outdated version of Qt ?



  • @SGaist said in qt 5.5.1 can't display in linuxfb:fb1:

    Hi and welcome to devnet,
    Which device is that ?
    Do you mean that if you force the frame buffer to 1 it does not work ?
    What exact line do you use when it fails ?
    Do you get any error message ?
    Is there anything in the system logs with regard to that ?
    Do you have any other application that can output on the second frame buffer ?
    Are you locked to that outdated version of Qt ?

    Hi SGaist:
    This is a Linux device

    Yes, the program doesn't work when I specify / dev / fb1 as the buffer frame

    Error message:

    QPainter::begin: Paint device returned engine == 0, type:0/1/2/3...

    In addition, the program will directly terminate and find the segment error in QT source code:

    qtbase/src/widgets/kernel/qwidget.cpp:

    void QWidgetPrivate::setSystemClip(QPaintDevice *paintDevice, const QRegion &region)

    {

    // Transform the system clip region from device-independent pixels to device pixels

    QPaintEngine *paintEngine = paintDevice->paintEngine();

    QTransform scaleTransform;

    const qreal devicePixelRatio = paintDevice->devicePixelRatio();

    scaleTransform.scale (devicePixelRatio, devicePixelRatio);

    paintEngine->d_ func()->systemClip = scaleTransform.map (region);

    }

    It is found that paintdevice > paintengine() is NULL in log printing

    The QT version I use is determined to be 5.5.1, which means that this situation only occurs when fb1 is specified

    I also confirm that the buffer frame of fb1 works


  • Lifetime Qt Champion

    Does it have the same properties as fb0 ?
    How do you ensure that it works ?



  • @SGaist
    I'm sorry I didn't reply these days, because I'm busy with other things

    I can make sure it works because it can run non QT programs


  • Lifetime Qt Champion

    You didn't answer about the differences between the devices behind fb0 and fb1.

    What application do you run to test fb1 ?



  • @SGaist fb.png
    In the picture is the corresponding relationship between fb0 and fb1 and the device,
    my qt program can only be output to the display screen,and when i :
    cat test.yuv > /dev/fb1 : lcd can display this YUV picture ,so i confirm /dev/fb1 works.


  • Lifetime Qt Champion

    That's not a graphic application making use of fb1.
    My question was rather: do you have any other graphical application able to access fb1 ?



  • @SGaist QT version 4.7.3 program can run on fb1:
    Through export QWS_DISPLAY= :/dev/fb1
    When executing the program: xx -qws
    fb1 is a virtual frame buffer


  • Lifetime Qt Champion

    Good.

    Would it be possible to use a more recent version of Qt ?
    5.5.1 is really out dated and the backend has likely changed since then.

    In any case, I would add some debugging info to the plugin to determine what is happening. It could be some detection failing.


Log in to reply