2016-05-19 1 views
1

У меня есть кросс-компилированный Qt5.4.8 с использованием yocto для платы Texas Instruments для DRA7XX-EVM. Ниже приведены параметры моей конфигурации.Дисплей не очищается после закрытия окна приложения QT5

QT_CONFIG_FLAGS = \ 
-rpath \ 
-pkg-config \ 
-opengl es2 \ 
-no-accessibility \ 
-dbus \ 
-no-directfb \ 
-evdev \ 
-make examples \ 
-compile-examples \ 
-no-fontconfig \ 
-freetype \ 
-no-iconv \ 
-icu \ 
-system-libjpeg \ 
-system-libpng \ 
-make libs \ 
-eglfs \  
-kms \  
-linuxfb \ 
-no-mitshm \ 
-no-mtdev -no-nis -openssl-linked -no-openvg -qt-pcre -pulseaudio -release -no-sm -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-sql-tds -nomake tests -make tools -no-tslib -libudev -widgets -no-xcb -no-xcursor -no-xfixes -no-xinerama -no-xinput -no-xinput2 -no-xkb -no-xkbcommon -no-xrandr -no-xrender -no-xshape -no-xsync -no-xvideo -system-zlib \ 
-no-wayland \ 
-force-pkg-config \ 

Я экспортировал ниже переменные на моей целевой оболочке:

export QT_QPA_PLATFORM=linuxfb

export QT_QPA_GENERIC_PLUGINS=evdevtouch,evdevmouse,evdevkeyboard

export QT_QPA_EVDEV_KEYBOARD_PARAMETERS=grab=1

и я бег моего приложения: $./Myapplication

Окно отображается правильно на экране. Но когда я выхожу из приложения, экран не очищается. Пожалуйста, проверьте мои параметры конфигурации и скажите, должны ли быть сделаны какие-либо изменения. А также некоторое решение относительно очистки фреймбуфера после закрытия окна.

+0

ли Вы, случайно, найти решение этой проблемы? Я сталкиваюсь с теми же проблемами на данный момент, хотя я использую EGLFS вместо linuxfb. –

+0

Извините, нет .. Я не смог решить эту проблему. Не с linuxfb.I действительно преодолел проблему tgis, запустив диспетчер окон. Извините за поздний ответ. – Hugh

ответ

0

Я имел такую ​​же проблему и добавил следующий обработчик сигнала, определенный в main(), например, как: CleanExit cleanExit;, чтобы решить эту проблему:

#include <csignal> 

struct CleanExit{ 
     CleanExit() { 
       signal(SIGINT, &CleanExit::exitQt); 
       signal(SIGTERM, &CleanExit::exitQt); 
     } 

     static void exitQt(int sig) { 
       QCoreApplication::exit(0); 
     } 
}; 
1

Я решил эту проблему с помощью qAddPostRoutine(), чтобы добавить процедуру, которая очищает буфер кадра при выходе.

Следующая является несомненным функция:

//Used on exit to clear the fb 
static void fbclear() 
{ 
    char dev[256] = "/dev/fb"; 
    struct fb_var_screeninfo var_info; 
    int fd = open(dev, O_RDWR); 
    int line_size; 
    int buffer_size; 
    void *buffer = NULL; 
    if (fd < 0) { 
     printf("failed to open %s display device\n", dev); 
     return; 
    } 
    //get display size 
    ioctl (fd, FBIOGET_VSCREENINFO, &var_info); 
    line_size = var_info.xres * var_info.bits_per_pixel/8; 
    buffer_size = line_size * var_info.yres; 
    //malloc buffer and set to 0 
    buffer = malloc(buffer_size); 
    memset(buffer, 0, buffer_size); 
    //write zeros to display 
    write(fd, buffer, buffer_size); 
    free(buffer); 
    close(fd); 
    return; 
} 

Затем я добавил следующее к моей основной():

qAddPostRoutine(fbclear); 
Смежные вопросы