2016-05-19 10 views
1

Texas Instruments DRA7XX-EVMボード用にyoctoを使用してQt5.4.8をクロスコンパイルしました。以下は私の設定オプションです。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

は、この問題の解決策を見つける万が一、あなたをしましたか?私は現時点で同じ問題に直面していますが、linuxfbの代わりにEGLFSを使用しています。 –

+0

申し訳ありません。私はこの問題を解決することができませんでした.linuxfbではありません。私はウィンドウマネージャを実行してtgisの問題を克服しました。 – Hugh

答えて

0

私は同じ問題を抱えていたとして、たとえばmain()で定義され、以下のシグナルハンドラを追加しました:これを解決するために、​​:

#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); 
関連する問題