1

数秒間非アクティブになった後、アプリケーションでマウスを自動的に非表示にしようとしています。これを処理するコードを以下に示します。子ウィンドウを開くまで、すべてがうまく機能します。子ウィンドウの上にマウスを移動するまで、マウスは再表示されません。MyMainWindow::eventFilter() ですべてのイベントを監視すると、子ウィンドウが開いている間、親ウィンドウのイベントは表示されません。アプリケーションのすべてのウィンドウにqApp->installEventFilter()イベントフィルターを追加したと思いました。考え?

私のプラットフォームは Windows 7 と Qt 4.8 です。アプリケーションは、キオスク コンピューターでフル スクリーンで実行されます。つまり、私のアプリケーション以外にコンピューター上で実行されるものはありません。

MyMainWindow::MyMainWindow( QWidget *parent ) :
    QMainWindow( parent ),
    ui( new Ui::MyMainWindow )
{
    // all the other setup...
    hideMouseTimer.start( HideMouseDelay_ms );
    connect( &hideMouseTimer, SIGNAL(timeout()), this, SLOT(hideMouseTimerExpiry()) );

    if( qApp )
    {
        qApp->installEventFilter( this );
    }
}

bool MyMainWindow::eventFilter( QObject *obj, QEvent *event )
{
   /*
    * Monitor mouse movement. If the mouse has been hidden, show it and start
    * the timer for the next check for hiding it.
    */
   if( event->type() == QEvent::MouseMove )
   {
       qApp->restoreOverrideCursor();
       hideMouseTimer.start( HideMouseDelay_ms );
   }

   return QWidget::eventFilter( obj, event ); 
}

void MyMainWindow::hideMouseTimerExpiry()
{
    qApp->setOverrideCursor( QCursor( Qt::BlankCursor ) );
    hideMouseTimer.stop();
}

void MyMainWindow::on_dialog_clicked()
{
    myDiaglog *d = new myDialog();
    d->exec();
    delete d;
}
4

0 に答える 0